

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# ORDER BY 子句
<a name="sql-reference-order-by-clause"></a>

如果流式查询的前导表达式基于时间且是单调的，则该查询可以使用 ORDER BY。例如，前导表达式基于 ROWTIME 列的流式查询可以使用 ORDER BY 执行以下操作：
+ 对流式 GROUP BY 的结果进行排序。
+ 对在流的固定时间窗口内到达的一批行进行排序。
+ 对窗口式联接执行流式 ORDER BY。

针对前导表达式的“基于时间且单调”要求意味着查询

```
CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM DISTINCT ticker FROM trades ORDER BY ticker
```

会失败，但是查询

```
CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM DISTINCT rowtime, ticker FROM trades ORDER BY ROWTIME, ticker
```

会成功。

**注意**  
前面的示例使用 `DISTINCT` 子句从结果集中删除同一股票代码的重复实例，以便结果是单调的。

流式 ORDER BY 使用 ORDER BY 子句的 SQL-2008 兼容语法对行进行排序。它可以与 UNION ALL 语句组合使用，并且可以对表达式进行排序，例如：

```
CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM x, y FROM t1
UNION ALL
SELECT STREAM a, b FROM t2 ORDER BY ROWTIME, MOD(x, 5)
```

ORDER BY 子句可以指定升序或降序的排序顺序，并且可以使用列序数以及指定（提及）选择列表中项目位置的序数。

**注意**  
上述查询中的 `UNION` 语句从两个单独的流中收集记录以进行排序。
<a name="TOC32"></a>
**流式 ORDER BY SQL 声明**  
流式 ORDER BY 子句包括以下函数属性：
+ 收集行，直到流式 ORDER BY 子句中的单调表达式不发生更改。
+ 不要求流式 GROUP BY 子句在同一语句中。
+ 可以使用任何基本 SQL 数据类型为 TIMESTAMP、DATE、DECIMAL、INTEGER、FLOAT、CHAR 和 VARCHAR 的列。
+ 不要求 columns/expressions 在 ORDER BY 子句中必须出现在语句的 SELECT 列表中。
+ 应用 ORDER BY 子句的所有标准 SQL 验证规则。

以下查询是流式 ORDER BY 的一个示例：

```
CREATE OR REPLACE PUMP "STREAM_PUMP" AS INSERT INTO "DESTINATION_SQL_STREAM"
SELECT STREAM state, city, SUM(amount)
FROM orders
GROUP BY FLOOR(ROWTIME TO HOUR), state, city
ORDER BY FLOOR(ROWTIME TO HOUR), state, SUM(amount)
```