跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

ORDER BY

ORDER BY子句基于一个或多个列对行进行排序。

该子句可用于分页。

语法

order_by_clause
ORDER BY value_expression ASC ASCENDING DESC DESCENDING NULLS FIRST NULLS LAST ,

order_by_clause ::=
    'ORDER BY' (value_expression ( 'ASC' | 'ASCENDING' | 'DESC' | 'DESCENDING' )? ('NULLS FIRST' | 'NULLS LAST')?) ( ',' (value_expression ( 'ASC' | 'ASCENDING' | 'DESC' | 'DESCENDING' )? ('NULLS FIRST' | 'NULLS LAST')?) )*

参数

value_expression

指定排序所依据的列的值表达式,这样的列也称为排序键。排序键支持的数据类型包括:

关于值表达式的更多信息,请参见表达式。

ASC | ASCENDING | DESC | DESCENDING

排序键的排序规则。

  • ASC/ASCENDING:默认值,按升序排序值。
  • DESC/DESCENDING:按降序排序值。

如果有多个排序键,记录先按照第一个排序键进行排序。如果第一个排序键的取值相同,则按照第二个排序键对记录进行排序,以此类推。

有关每种数据类型的排序原理,请参见比较谓词。

NULLS FIRST | NULLS LAST

排序结果中null值的位置。

  • NULLS FIRST:null值排在排序结果的开头。当排序规则为DESC或DESCENDING时,这是默认行为。
  • NULLS LAST:null值排在排序结果的末尾。当排序规则为ASC或ASCENDING时,这是默认行为。

示例

按升序排序

'''
TABLE users TYPED TABLE {id INT, name STRING, birthDate DATE} =
    (199, "Julie Kavner", date("1990-01-30")),
    (198, "Tom Cruise", date("1990-04-15")),
    (198, "Amy Hasegawa", date("1990-07-04"))
FOR r IN users
RETURN r.name AS name, r.birthDate AS birthDate
ORDER BY birthDate ASC 
'''

上述语句明确指定排序规则为ASC,按birthDate升序排序返回的结果。

返回:

+--------------+------------+
| name         | birthDate  |
+--------------+------------+
| Julie Kavner | 1990-01-30 |
| Tom Cruise   | 1990-04-15 |
| Amy Hasegawa | 1990-07-04 |
+--------------+------------+

按降序排序

'''
TABLE users TYPED TABLE {id INT, name STRING, birthDate DATE} =
    (199, "Julie Kavner", date("1990-01-30")),
    (198, "Tom Cruise", date("1990-04-15")),
    (198, "Amy Hasegawa", date("1990-07-04"))
FOR r IN users
RETURN r.name AS name, r.birthDate AS birthDate
ORDER BY birthDate DESC 
'''

上述语句明确指定排序规则为DESC,按birthDate降序排序返回的结果。

返回:

+--------------+------------+
| name         | birthDate  |
+--------------+------------+
| Amy Hasegawa | 1990-07-04 |
| Tom Cruise   | 1990-04-15 |
| Julie Kavner | 1990-01-30 |
+--------------+------------+

带null值的排序

'''
TABLE users TYPED TABLE {id INT, name STRING, birthDate DATE} =
    (199, "Julie Kavner", date("1990-01-30")),
    (198, "Tom Cruise", date("1990-04-15")),
    (198, "Amy Hasegawa", null)
FOR r IN users
RETURN r.name AS name, r.birthDate AS birthDate
ORDER BY birthDate DESC NULLS FIRST 
'''

上述语句按birthDate降序排序返回的结果,并将null值放在结果的开头。

返回:

+--------------+------------+
| name         | birthDate  |
+--------------+------------+
| Amy Hasegawa | null       |
| Tom Cruise   | 1990-04-15 |
| Julie Kavner | 1990-01-30 |
+--------------+------------+

多个排序键的排序

支持指定多个排序规则不同的排序键。返回结果先根据第一个排序键排序。如果这个键的取值相同,返回结果将根据第二个排序键进一步排序。此过程会继续进行,直到所有的排序键都应用完毕。

'''
TABLE users TYPED TABLE {id INT, name STRING, birthDate DATE} =
    (195, "Julie Kavner", date("1990-01-30")),
    (198, "Tom Cruise", date("1990-04-15")),
    (196, "Amy Hasegawa", date("1990-04-15"))
FOR r IN users
RETURN r.id AS id, r.birthDate AS birthDate, r.name AS name 
ORDER BY birthDate ASC, id DESC  
'''

上述语句指定birthDate为第一个排序键,按升序排序,id为第二个排序键,按降序排序。

返回结果首先根据birthDate升序排序。如果这个键的取值相同,返回结果将根据id降序排序。

返回:

+-----+------------+--------------+
| id  | birthDate  | name         |
+-----+------------+--------------+
| 195 | 1990-01-30 | Julie Kavner |
| 198 | 1990-04-15 | Tom Cruise   |
| 196 | 1990-04-15 | Amy Hasegawa |
+-----+------------+--------------+