格式、参数
ORDER BY 可以调整数据流中的行与行之间的顺序。
语法:
- 格式:order by
<column1>
<fashion1>
,<column2>
<fashion2>
, ... - 参数:(见下表)
- 受影响列:
<column>
及其所有同源列
名称 | 类型 | 规范 | 描述 |
---|---|---|---|
<column> |
NODE,EDGE,PATH,ATTR,ARRAY | / | 排序依据,多个依据必须为同源列,从左到右进行多级排序 |
<fashion> |
string | asc 或 desc ,大小写均可 |
排序方式,省略时为 asc 升序 |
详解
find().nodes([4, 2]) as nodes
n(nodes).e().n(as n) as path
order by n.radius desc, n
return path
上面 UQL 代码中的 ORDER BY 子句对模板查询得到的一步路径进行排序;先按照终点的半径降序排列,半径相同的再按照终点的 UUID 升序排列:
根据 ATTR(数值)排序
示例:查询 10 张余额最高的银行卡,即按照卡的余额进行降序排序
find().nodes({@card}) as n
order by n.balance desc
return n{*} limit 10
根据 ATTR(时间)排序
示例:查询顾客 CU001 的银行卡,按开卡日期升序排列
n({_id == "CU001"}).re({@has}).n({@card} as n)
order by n.open_date
return n{*}
根据 ATTR(字符串)排序
示例:查询 10 个邮箱,按地址降序排列
find().nodes({@email}) as n
limit 10
order by n.address desc
return n{*}
根据 NODE 排序
示例:查询 10 条两步转账路径,按照路径中第二个点的 UUID 降序排列
n({@card}).e({@transfer}).n({@card} as n)
.e({@transfer}).n({@card}) as p
limit 10
order by n desc
return p{*}
根据 EDGE 排序
示例:查询 10 条两步转账路径,按照路径中第二条边的 UUID 降序排列
n({@card}).e({@transfer}).n({@card})
.e({@transfer} as e).n({@card}) as p
limit 10
order by e desc
return p{*}
分组及排序
示例:对所有银行卡按级别进行分组,统计每个级别的卡的数量,返回卡最多的 3 个级别及对应的卡的数量
find().nodes({@card}) as n
group by n.level as level
return level, count(n) as total limit 3
order by total desc