

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

# 分析函数
<a name="sql-reference-analytic-functions"></a>

分析函数会返回根据由 [SELECT 子句](sql-reference-select-clause.md)标识或在 [ORDER BY 子句](sql-reference-order-by-clause.md)中的有限行集中的数据（或该有限行集的相关数据）计算得出的结果。

SELECT 主题解释了 order-by 子句，显示了 order-by 图表以及窗口化子句（和 window-specification 图表）。要查看 Select 语句中使用 order-by 子句的位置，请参阅本指南 SELECT 主题中的 Select 图表。

1. 分析函数必须指定一个窗口。由于对窗口规范有一些限制，并且指定用于窗口式聚合和窗口式联接的窗口之间存在一些区别，因此请参阅[允许和不允许的窗口规范](sql-reference-allowed-disallowed-window.md)以获取解释。

1. 分析函数只能出现在 SELECT 子句的 <selection list> 部分或 ORDER BY 子句中。

本主题后面的表格中列出了其他区别。

使用分析函数执行查询通常被称为窗口式聚合（如下所述），与[聚合函数](sql-reference-aggregate-functions.md)不同。

由于存在窗口规范，因此使用分析函数的查询生成结果的方式与聚合查询不同。对于输入集中的每一行，窗口规范都标识了分析函数对其进行操作的不同行集。如果窗口规范还包含 PARTITION BY 子句，则在生成结果时，将只考虑窗口中与输入行共享同一分区的行。

如果输入行在用作分析函数输入的列中包含 null，则分析函数将忽略该行，但 COUNT 除外，它会计数具有 null 值的行。如果窗口（或者窗口中的分区 PARTITION BY）不包含任何行，则分析函数将返回 null。但 COUNT 除外，将返回零。


**聚合函数和分析函数之间的区别**  

| 函数类型 | 输出 | 使用的行或窗口 | 注意 | 
| --- | --- | --- | --- | 
|  [聚合函数](sql-reference-aggregate-functions.md)  |  每组输入行对应一个输出行。  |  所有输出列都是根据同一窗口或同一组行计算的。  |  不允许在[聚合函数](sql-reference-aggregate-functions.md)中使用 COUNT DISTINCT。不允许使用以下类型的语句： SELECT COUNT(DISTINCT x) ... FROM ... GROUP BY ...  | 
|  分析函数  |  每个输入行对应一个输出行。  |  可以使用不同窗口或分区计算每个输出列。  |  COUNT DISTINCT 不能用作分析函数或用在窗口式聚合中。  | 

## 相关主题
<a name="sqlrf_analyticfunctions_relatedtopics"></a>
+ [流的窗口式聚合](sql-reference-windowed-aggregation-stream.md)
+ [SELECT 语句](sql-reference-select.md) 
+ [SELECT 子句](sql-reference-select-clause.md) 