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图例。
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P189_91659.jpg?sign=1739499050-VIxAzW5dMhlA1PRjX3xixbIHrSwlMWgm-0-ccce15c7ddf920d24f4c52d5a96c9b1d)
图3-18 ORDER BY图例
3.3.15.1 根据属性对节点进行排序
ORDER BY用于对输出进行排序。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P190_102793.jpg?sign=1739499050-V2WxkOIVy8ja4YYvLdlA4uhOPArHv1lT-0-4ddf7bc4f656641047a7b00b2b520399)
结果将返回根据节点name属性进行排序的节点序列。
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P190_101883.jpg?sign=1739499050-KwF3bmEj2oGOd52vSpATxjFiepViLZpm-0-5035c048ac1c5e4de31e2c101f9e810e)
3.3.15.2 根据多个属性对节点进行排序
ORDER BY语句中支持根据多个属性对节点进行排序。Cypher将先根据第一个变量进行排序,对于相等的值,然后再检查ORDER BY中的下一个属性值,以此类推。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P190_102794.jpg?sign=1739499050-iOLRBhc5yuVxCQ1ugG8r1aUtxOFIYiCi-0-b0a1330d760068e23f472172316f7c89)
本例中先根据年龄排序,对于年龄相等的,再根据名字来排序。
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P190_101886.jpg?sign=1739499050-Ev72EnQBEWM8oVDeSGKDzU8LHtp2BvRC-0-afeff97c27c33ce4fad966aa7117a955)
3.3.15.3 节点降序排列
在排序的变量后面添加DESC[ENDING],Cypher将以逆序(即降序)对输出进行排序。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P190_102795.jpg?sign=1739499050-GBAWii7NmXVErKEYWxQWpbu3QHcTfLBt-0-b8976201942c76017e8a517eac54b0b6)
本例中根据节点的name降序排列这些节点。
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P191_101888.jpg?sign=1739499050-1bAcEHERjw5Qx1GU9Km2Mo6pYk1dztin-0-842e65f5a5cfc6a10dbdf81a8fbc3c14)
3.3.15.4 空值的排序
当结果集中包含null值时,对于升序排列,null总是在结果集的末尾。而对于降序排序,null值总是排在最前面。
查询:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P191_102796.jpg?sign=1739499050-uRpbOOGTdWC3XnAE36BLKdAQQZYheWtj-0-8fc6509b22fcf308bc2f90067485396c)
结果将返回以length属性排序的节点,没有length属性的节点将排在最后。
结果:
![](https://epubservercos.yuewen.com/84FE89/26581284601284906/epubprivate/OEBPS/Images/Figure-P191_101891.jpg?sign=1739499050-boheA3qLiqdihLohUVBEtVTSZw6wy3tn-0-9b3b449b619df3064a29e06500f0709e)