- Categories:
ORDER BY¶
Specifies an ordering of the rows of the result table from a SELECT list.
语法
按特定列排序
其中:
按所有列排序
参数
{ ASC | DESC }可以按升序(从低到高)或降序(从高到低)返回排序键的值。
默认值:ASC
NULLS { FIRST | LAST }可以根据排序顺序(ASC 或 DESC),指定 NULL 值是在非 NULL 值之前还是之后返回。
默认值:取决于排序顺序(ASC 或 DESC);有关详细信息,请参阅下面的使用说明
ALL按 SELECT 列表中指定的所有列对结果进行排序。结果按列的出现顺序排序。
例如,假设 SELECT 列表包含:
The results are sorted first by
col_1, then bycol_2, and then bycol_3.Note
如果 SELECT 列表中的列使用聚合函数,则无法指定 ORDER BY ALL。
使用说明
- 所有数据都根据 ASCII 表中每个字符的数字字节值进行排序。支持 UTF-8 编码。
- For numeric values, leading zeros before the decimal point and trailing zeros (
0) after the decimal point have no effect on sort order.
-
When NULLS FIRST or NULLS LAST isn’t specified, the ordering of NULL values depends on the setting of the DEFAULT_NULL_ORDERING parameter and the sort order:
- When the sort order is ASC (the default) and the DEFAULT_NULL_ORDERING parameter is set to
LAST(the default), NULL values are returned last. Therefore, unless specified otherwise, NULL values are considered to be higher than any non-NULL values. - When the sort order is ASC and the DEFAULT_NULL_ORDERING parameter is set to
FIRST, NULL values are returned first. - When the sort order is DESC and the DEFAULT_NULL_ORDERING parameter is set to
FIRST, NULL values are returned last. - When the sort order is DESC and the DEFAULT_NULL_ORDERING parameter is set to
LAST, NULL values are returned first.
- When the sort order is ASC (the default) and the DEFAULT_NULL_ORDERING parameter is set to
-
The sort order isn’t guaranteed to be consistent for values of different data types in semi-structured data, such as an array that contains elements of different data types.
-
Top-K pruning can improve the performance of queries that include both LIMIT and ORDER BY clauses. For more information, see Top-K pruning for improved query performance.
-
An ORDER BY clause can be used at different levels in a query, such as in a subquery or inside an OVER() clause for a window function. An ORDER BY clause inside a subquery or an OVER() clause applies only in that context. For example, the ORDER BY clause in the following query orders results only within the subquery, not the outermost level of the query:
在该示例中,在子查询中指定 ORDER BY 子句,因此子查询按月销售额的顺序返回名称。子查询中的 ORDER BY 子句不适用于外部查询。此查询返回月销售额排名前三的三个分支机构的名称,但不一定按月销售额排序。
排序的开销可能很高。如果希望对外部查询的结果进行排序,请仅在查询的顶层使用 ORDER BY 子句,而且,除非必要,否则应避免在子查询中使用 ORDER BY 子句。
Similarly, when ORDER BY and LIMIT (or FETCH) clauses are at different nesting levels, results can be unpredictable. For details and examples, see the LIMIT / FETCH usage notes.
示例
以下示例演示如何使用 ORDER BY 对结果进行排序:
按字符串值排序
以下示例按字符串值对结果进行排序:
按数值排序
以下示例按数值对结果进行排序:
NULLS 排序:放在最前或最后¶
The following example configures all queries in the session to sort NULLS last by setting the DEFAULT_NULL_ORDERING
parameter to LAST.
以下示例通过在查询中指定 NULLS FIRST 来替换 DEFAULT_NULL_ORDERING 参数:
The following example sets the DEFAULT_NULL_ORDERING parameter to FIRST to sort NULLS first:
以下示例通过在查询中指定 NULLS LAST 来替换 DEFAULT_NULL_ORDERING 参数:
按 SELECT 列表中的所有列排序¶
要运行此部分中的示例,请创建下表:
以下示例按表中的所有列对结果进行排序:
As shown below, the results are sorted first by the a column, then by the s column, and then by the b column (the
order in which the columns were defined in the table).
以下示例按升序对结果进行排序。
以下示例将 DEFAULT_NULL_ORDERING 参数设置为针对会话期间执行的所有查询将 NULL 值排在最后:
以下示例在查询中指定 NULLS FIRST 以替换该设置:
The following example returns the columns in the order b, s, and a. The results are sorted first by b, then by
s, and then by a: