ORDER BY¶
ORDER BY子句基于一个或多个列对行进行排序。
该子句可用于分页。
语法¶
- order_by_clause
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 |
+-----+------------+--------------+