精通Neo4j
上QQ阅读APP看书,第一时间看更新

3.3.15 ORDER BY语句

ORDER BY是紧跟RETURN或者WITH的子句,它指定了输出的结果应该如何排序。

提示:提示:不能对节点或关系进行排序,只能对它们的属性进行排序。ORDER BY依赖值的比较来排序,具体可参见3.2.5.8节。

在变量的范围方面,ORDER BY遵循特定的规则,这取决于RETURN的投射或WITH语句是否聚合或者DISTINCT。如果它是一个聚合或者DISTINCT投射,那么只有投射中的变量可用。如果投射不修改输出基数(聚合和DISTINCT做的),在投射之前可用的变量也可以用。当投射语句覆盖了已存在的变量时,只有新的变量可用。如图3-18所示为ORDER BY图例。

图3-18 ORDER BY图例

3.3.15.1 根据属性对节点进行排序

ORDER BY用于对输出进行排序。

查询:

结果将返回根据节点name属性进行排序的节点序列。

结果:

3.3.15.2 根据多个属性对节点进行排序

ORDER BY语句中支持根据多个属性对节点进行排序。Cypher将先根据第一个变量进行排序,对于相等的值,然后再检查ORDER BY中的下一个属性值,以此类推。

查询:

本例中先根据年龄排序,对于年龄相等的,再根据名字来排序。

结果:

3.3.15.3 节点降序排列

在排序的变量后面添加DESC[ENDING],Cypher将以逆序(即降序)对输出进行排序。

查询:

本例中根据节点的name降序排列这些节点。

结果:

3.3.15.4 空值的排序

当结果集中包含null值时,对于升序排列,null总是在结果集的末尾。而对于降序排序,null值总是排在最前面。

查询:

结果将返回以length属性排序的节点,没有length属性的节点将排在最后。

结果: