ORDER BY

更新时间:2025-01-09 07:25:51

ORDER BY是紧跟在WITH子句之后的一个子句。ORDER BY指定输出应进行排序以及排序的方式。

简介

请注意,您不能根据节点或关系进行排序,排序必须基于属性。ORDER BY通过比较操作来对数据输出结果进行排序。

在变量作用域方面,ORDER BY遵循一些特殊规则,这取决于投影的RETURNWITH子句是否是聚合或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)
  • 简介
  • 基于属性对节点排序
  • 基于多个属性对节点排序
  • 按降序排列节点排序
  • 空值排序

点击开启售前

在线咨询服务