聚合函数¶
聚合函数对跨行的值进行操作,以执行总和、平均值、计数、最小值/最大值、标准差和估计值等数学计算,以及执行一些非数学运算。
聚合函数将多行(实际上是零行、一行或多行)作为输入,并生成单个输出。相比之下,标量函数将一行作为输入,并生成一行(一个值)作为输出。
聚合函数始终只返回一行, 即使输入包含零行 也是如此。通常,如果输入包含零行,则输出为 NULL。但是,聚合函数在传递零行时可以返回 0、空字符串或一些其他值。
函数列表(按子类别)¶
函数名称 |
备注 |
|---|---|
一般聚合 |
|
使用与其他聚合函数不同的语法。 |
|
使用与其他聚合函数不同的语法。 |
|
STDDEV 和 STDDEV_SAMP 为别名。 |
|
VAR_POP 的别名。 |
|
VAR_SAMP 的别名。 |
|
按位聚合 |
|
布尔聚合 |
|
哈希 |
|
半结构化数据聚合 |
|
线性回归 |
|
统计与概率 |
|
计算非重复值 |
|
基数估算 . (使用 HyperLogLog) |
|
HLL 的别名。 |
|
非聚合函数;使用来自 DATASKETCHES_HLL_ACCUMULATE 或 DATASKETCHES_HLL_COMBINE 的标量输入。 |
|
非聚合函数;使用来自 HLL_ACCUMULATE 或 HLL_COMBINE 的标量输入。 |
|
相似性估算 . (使用 MinHash) |
|
频率估算 . (使用 Space-Saving) |
|
非聚合函数;使用来自 APPROX_TOP_K_ACCUMULATE 或 APPROX_TOP_K_COMBINE 的标量输入。 |
|
百分位估算 . (使用 T-Digest) |
|
非聚合函数;使用来自 APPROX_PERCENTILE_ACCUMULATE 或 APPROX_PERCENTILE_COMBINE 的标量输入。 |
|
聚合实用程序 |
|
非聚合函数,但可以与聚合函数结合使用,以确定由 GROUP BY 查询生成的行的聚合级别。 |
|
GROUPING 的别名。 |
|
AI 函数 |
|
向量聚合 |
|
语义视图 |
|
介绍性示例¶
以下示例说明了聚合函数 (AVG) 和标量函数 (COS) 之间的区别。标量函数为每个输入行返回一个输出行,而聚合函数为多个输入行返回一个输出行:
创建一个表并用值填充它:
查询表:
标量函数为每个输入行返回一个输出行。
聚合函数为多个输入行返回一个输出行:
聚合函数和 NULL 值¶
某些聚合函数会忽略 NULL 值。例如,AVG 根据以下公式将 1、5 和 NULL 值的平均值计算为 3:
(1 + 5) / 2 = 3
在分子和分母中,仅使用两个非 NULL 值。
如果传递给聚合函数的所有值都是 NULL,则聚合函数返回 NULL。
可以将多个列传递给某些聚合函数。例如:
在这些实例中,如果任何单个列为 NULL,则聚合函数将忽略某一行。
例如,在以下查询中,COUNT 返回 1,而不是 4,因为四行中有三行在所选列中至少包含一个 NULL 值:
创建一个表并用值填充它:
查询表:
如果使用引用两列或多列的表达式调用 SUM,并且如果其中一列或多列是 NULL,则该表达式的计算结果为 NULL,并且忽略该行:
此行为与 GROUP BY 的行为不同,后者在某些列为 NULL 时不会丢弃行: