ORDER BY
是紧跟在WITH
子句之后的一个子句。ORDER BY
指定输出应进行排序以及排序的方式。
简介
请注意,您不能根据节点或关系进行排序,排序必须基于属性。ORDER BY
通过比较操作来对数据输出结果进行排序。
在变量作用域方面,ORDER BY
遵循一些特殊规则,这取决于投影的RETURN
或WITH
子句是否是聚合或DISTINCT
。如果是一个聚合或DISTINCT
投影,则只能使用投影中可用的变量。如果投影不改变输出基数(即聚合和DISTINCT
会改变),那么投影子句之前的变量也可以使用。当投影子句遮蔽了已存在的变量时,只有新的变量是可用的。
最后,不允许在ORDER BY
子句中使用未在投影子句中列出的聚合表达式。这一规则是为了确保ORDER BY
只改变结果的顺序,而不改变结果本身。
基于属性对节点排序
ORDER BY
用于对结果集进行排序。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n)
WITH n.name as name, n.age as age
ORDER BY n.name
RETURN name, age
$$) as (name agtype, age agtype);
将按节点名称排序返回结果:
name | age
----------+-----
"A" | 34
"B" | 34
"C" | 32
(3 rows)
基于多个属性对节点排序
可通过在ORDER BY
子句中列出每个变量来按多个属性排序。Cypher将根据列出的第一个变量对结果进行排序,对于相等的值,将继续使用ORDER BY
子句中的下一个属性进行排序,依此类推。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n)
WITH n.name as name, n.age as age
ORDER BY n.age, n.name
RETURN name, age
$$) as (name agtype, age agtype);
将返回节点,首先按它们的年龄排序,然后按名称排序:
name | age
----------+-----
"C" | 32
"A" | 34
"B" | 34
(3 rows)
按降序排列节点排序
通过在要排序的变量后面添加DESC[ENDING]
,可以实现逆序排序。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n)
WITH n.name AS name, n.age AS age
ORDER BY n.name DESC
RETURN name, age
$$) as (name agtype, age agtype);
将返回按名称逆序排列的节点:
name | age
----------+-----
"C" | 32
"B" | 34
"A" | 34
(3 rows)
空值排序
在对结果集进行排序时,null
在升序排序中总是位于结果集的末尾,在降序排序中则位于首位。
示例
SELECT *
FROM cypher('graph_name', $$
MATCH (n)
WITH n.name AS name, n.age AS age, n.height
ORDER BY n.height
RETURN name, age, height
$$) as (name agtype, age agtype, height agtype);
节点按照长度属性排序返回,没有该属性的节点排在最后。
name | age |
----------+----------+----------
"A" | 34 | 170
"B" | 32 | 185
"C" | 34 | <NULL>
(3 rows)
该文章对您有帮助吗?
- 本页导读 (1)
- 简介
- 基于属性对节点排序
- 基于多个属性对节点排序
- 按降序排列节点排序
- 空值排序