Source: https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/clauses/order-by/ Documentation version: v5.3.2 # ORDER BY `ORDER BY`子句基于一个或多个列对行进行排序。 该子句可用于[分页](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/dql/order-by-page/)。 ## 语法 语法图源码 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` 指定排序所依据的列的值表达式,这样的列也称为排序键。排序键支持的数据类型包括: - [数值](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/numeric-type/) - [字符串](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/c-string-type/) - [布尔](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/boolean-type/) - [日期和时间](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/data-types/temporal-type/) 关于值表达式的更多信息,请参见[表达式](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/)。 ### `ASC | ASCENDING | DESC | DESCENDING` 排序键的排序规则。 - `ASC`/`ASCENDING`:默认值,按升序排序值。 - `DESC`/`DESCENDING`:按降序排序值。 如果有多个排序键,记录先按照第一个排序键进行排序。如果第一个排序键的取值相同,则按照第二个排序键对记录进行排序,以此类推。 有关每种数据类型的排序原理,请参见[比较谓词](https://dev-docs.yueshu.com.cn/v5.3.2/database-gql-reference/fe/predicates/comparison/)。 ### `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 | +-----+------------+--------------+ ````