跳到主要内容
版本:latest

聚合函数

聚合函数是数据库中常用的函数,用于对数据进行聚合计算和汇总。它们接收一组值作为输入,并返回一个单一的聚合结果。聚合函数可以用于执行各种操作,例如计算总和、平均值、最大值、最小值等。

通用

avg

返回指定列中数值的平均值。

avg(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 avg 示例
SELECT station, avg(temperature) FROM air group by station;
+-------------+----------------------+
| station | AVG(air.temperature) |
+-------------+----------------------+
| XiaoMaiDao | 64.93894989583701 |
| LianYunGang | 65.12753786942551 |
+-------------+----------------------+

count

返回指定列中的行数。

count(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 count 示例
SELECT station, count(temperature) FROM air group by station;
+-------------+------------------------+
| station | COUNT(air.temperature) |
+-------------+------------------------+
| LianYunGang | 28321 |
| XiaoMaiDao | 28321 |
+-------------+------------------------+

max

返回指定列中的行数。

max(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 max 示例
SELECT station, max(temperature) FROM air group by station;

+-------------+----------------------+
| station | MAX(air.temperature) |
+-------------+----------------------+
| LianYunGang | 80.0 |
| XiaoMaiDao | 80.0 |
+-------------+----------------------+

mean

avg 的别名。

median

返回指定列中的中值。

median(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 median 示例
SELECT  median(temperature) FROM air;
+-------------------------+
| MEDIAN(air.temperature) |
+-------------------------+
| 65.0 |
+-------------------------+

min

返回指定列中的最小值。

min(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 min 示例
SELECT  min(temperature) FROM air;
+----------------------+
| MIN(air.temperature) |
+----------------------+
| 50.0 |
+----------------------+

sum

返回指定列中所有值的总和。

sum(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 sum 示例
SELECT  sum(temperature) FROM air;
+----------------------+
| SUM(air.temperature) |
+----------------------+
| 3683613.0 |
+----------------------+
Query took 0.035 seconds.

array_agg

返回从表达式元素创建的数组。如果给出了排序要求,则按所需排序的顺序插入元素。

array_agg(expression [ORDER BY expression])
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 array_agg 示例

假设表中的内容如下:

SELECT time,temperature FROM air ORDER BY time limit 10;
+---------------------+-------------+
| time | temperature |
+---------------------+-------------+
| 2023-01-14T16:00:00 | 78.0 |
| 2023-01-14T16:00:00 | 80.0 |
| 2023-01-14T16:03:00 | 54.0 |
| 2023-01-14T16:03:00 | 64.0 |
| 2023-01-14T16:06:00 | 54.0 |
| 2023-01-14T16:06:00 | 79.0 |
| 2023-01-14T16:09:00 | 75.0 |
| 2023-01-14T16:09:00 | 55.0 |
| 2023-01-14T16:12:00 | 50.0 |
| 2023-01-14T16:12:00 | 74.0 |
+---------------------+-------------+

运行如下 SQL:

WITH  sample AS (SELECT time,temperature FROM air ORDER BY time limit 10)
SELECT array_agg(temperature) from sample;

结果将是:

+--------------------------------------------------------------+
| ARRAY_AGG(sample.temperature) |
+--------------------------------------------------------------+
| [78.0, 80.0, 54.0, 64.0, 54.0, 79.0, 75.0, 55.0, 50.0, 74.0] |
+--------------------------------------------------------------+

这个结果是一个数组,包含了表中所有行的温度值。

array_agg 还可以与 ORDER BY 子句结合使用,以确定数组中值的顺序,如果我们想让得到 temperature 按升序排列的数组,可以这样写:

WITH  sample AS (SELECT time,temperature FROM air ORDER BY time limit 10)
SELECT array_agg(temperature ORDER BY temperature ASC) from sample;

这将返回

+--------------------------------------------------------------+
| ARRAY_AGG(sample.temperature) |
+--------------------------------------------------------------+
| [50.0, 54.0, 54.0, 55.0, 64.0, 74.0, 75.0, 78.0, 79.0, 80.0] |
+--------------------------------------------------------------+

first_value

根据请求的顺序返回聚合组中的第一个元素。如果未给出排序,则从组中返回任意元素。

first_value(expression [ORDER BY expression])
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 first_value 示例
SELECT station, first_value(temperature ORDER BY time) FROM air GROUP BY station;
+-------------+------------------------------+
| station | FIRST_VALUE(air.temperature) |
+-------------+------------------------------+
| LianYunGang | 78.0 |
| XiaoMaiDao | 80.0 |
+-------------+------------------------------+

first

返回按时间排序的第一条记录。

first(time_expression, expression)
参数描述
time_expression必需为 time 列。
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 first 示例
SELECT first(time, temperature) FROM air;
+---------------------------------+
| first(air.time,air.temperature) |
+---------------------------------+
| 80.0 |
+---------------------------------+

last_value

根据请求的顺序返回聚合组中的第一个元素。如果未给出排序,则从组中返回任意元素。

last_value(expression [ORDER BY expression])
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 last_value 示例
SELECT station, last_value(temperature ORDER BY time) FROM air GROUP BY station;
+-------------+-----------------------------+
| station | LAST_VALUE(air.temperature) |
+-------------+-----------------------------+
| XiaoMaiDao | 55.0 |
| LianYunGang | 50.0 |
+-------------+-----------------------------+

last

返回按时间排序的最后一条记录。

last(expression_x, expression_y)
参数描述
time_expression必需为 time 列。
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 last 示例

SELECT last(time, temperature) FROM air;
+--------------------------------+
| last(air.time,air.temperature) |
+--------------------------------+
| 50.0 |
+--------------------------------+

mode

计算一组数据中出现频率最高的值。

mode(expression)
参数描述
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 mode 示例
SELECT mode(temperature) FROM air;
+-----------------------+
| mode(air.temperature) |
+-----------------------+
| 80.0 |
+-----------------------+

increase

计算范围向量中时间序列的增量,类似 Prometheus 中的 increase 函数。

increase(time_expression, expression ORDER BY time_expression)
参数描述
time_expression必需为 time 列。
expression要对其进行操作的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 mode 示例
SELECT station, INCREASE(time, temperature ORDER BY time) FROM air GROUP BY station ORDER BY station;
+-------------+------------------------------------+
| station | increase(air.time,air.temperature) |
+-------------+------------------------------------+
| LianYunGang | 964366.0 |
| XiaoMaiDao | 961627.0 |
+-------------+------------------------------------+

统计

corr

计算两个列之间的皮尔逊相关系数,这是衡量两个变量线性相关程度的一种方法。皮尔逊相关系数的值介于 -1 和 1 之间,其中 1 表示完全正相关,-1 表示完全负相关,0 表示没有线性相关。

corr(expression1, expression2)
参数描述
expression1要操作的第一个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
expression1要操作的第二个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 corr 示例
SELECT corr(temperature, pressure) FROM air;
+-------------------------------------------+
| CORRELATION(air.temperature,air.pressure) |
+-------------------------------------------+
| 0.003247570100691381 |
+-------------------------------------------+

covar

返回一组数字对的协方差。

covar(expression1, expression2)
参数描述
expression1要操作的第一个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
expression1要操作的第二个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 covar 示例
SELECT covar(temperature, pressure) FROM air;
+------------------------------------------+
| COVARIANCE(air.temperature,air.pressure) |
+------------------------------------------+
| 0.2589293257928204 |
+------------------------------------------+

covar_pop

返回一组数字对的总体协方差。

covar_pop(expression1, expression2)
参数描述
expression1要操作的第一个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
expression1要操作的第二个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 covar_pop 示例
SELECT covar_pop(temperature, pressure) FROM air;
+----------------------------------------------+
| COVARIANCE_POP(air.temperature,air.pressure) |
+----------------------------------------------+
| 0.25892475446190355 |
+----------------------------------------------+

covar_samp

返回一组数对的样本协方差。

covar_samp(expression1, expression2)
参数描述
expression1要操作的第一个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
expression1要操作的第二个表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
查看 covar_samp 示例
SELECT covar_samp(temperature, pressure) FROM air;
+------------------------------------------+
| COVARIANCE(air.temperature,air.pressure) |
+------------------------------------------+
| 0.2589293257928204 |
+------------------------------------------+

stddev

返回一组数字的标准差。

stddev(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 stddev 示例
SELECT stddev(temperature) FROM air;
+-------------------------+
| STDDEV(air.temperature) |
+-------------------------+
| 8.938534326752999 |
+-------------------------+

stddev_pop

返回一组数字的总体标准差。

stddev_pop(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 stddev_pop 示例
SELECT stddev_pop(temperature) FROM air;
+-----------------------------+
| STDDEV_POP(air.temperature) |
+-----------------------------+
| 8.938455422637864 |
+-----------------------------+

stddev_samp

返回一组数字的样本标准差。

stddev_samp(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 stddev_samp 示例
SELECT stddev_samp(temperature) FROM air;
+-------------------------+
| STDDEV(air.temperature) |
+-------------------------+
| 8.938534326752999 |
+-------------------------+

var

返回一组数字的统计方差。

var(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 var 示例
SELECT var(temperature) FROM air;
+---------------------------+
| VARIANCE(air.temperature) |
+---------------------------+
| 79.89739591054169 |
+---------------------------+

var_pop

返回一组数字的统计总体方差。

var_pop(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 var_pop 示例
SELECT var_pop(temperature) FROM air;
+-------------------------------+
| VARIANCE_POP(air.temperature) |
+-------------------------------+
| 79.89598534248422 |
+-------------------------------+

var_samp

返回一组数字的统计样本方差。

var_samp(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 var_samp 示例
SELECT var_samp(temperature) FROM air;
+---------------------------+
| VARIANCE(air.temperature) |
+---------------------------+
| 79.89739591054169 |
+---------------------------+

近似

approx_distinct

返回使用 HyperLogLog 算法计算的不同输入值的近似数量。

approx_distinct(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 approx_distinct 示例

这条 SQL 查询语句使用了 approx_distinct 函数来估计 air 表中 station 列的唯一值数量。approx_distinct(station) 的作用是计算大致有多少个不同的 station 值存在于 air 表中。查询结果显示的 approx_unique_station 值为 2,这意味着根据 approx_distinct 函数的估计,air 表中大约有 2 个不同的气象站(即 station 列的唯一值数量大约为 2)。

SELECT approx_distinct(station) AS approx_unique_station FROM air;
+-----------------------+
| approx_unique_station |
+-----------------------+
| 2 |
+-----------------------+

approx_median

返回输入值的近似中位数(第 50 个百分位)。它是 approx_percentile_cont(x, 0.5) 的别名。

approx_median(expression)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
查看 approx_median 示例
SELECT approx_median(temperature) as approx_median_temperature FROM air;
+---------------------------+
| approx_median_temperature |
+---------------------------+
| 64.91965582214088 |
+---------------------------+

approx_percentile_cont

使用 t-digest 算法返回输入值的近似百分位。

approx_percentile_cont(expression, percentile, centroids)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
percentile要计算的百分位数。必须是 0 到 1(含)之间的浮点值。
centroids可选,t-digest 算法中使用的质心数。默认值为 100。
提示

如果存在此数字或更少的唯一值,则可以期待确切的结果。质心数量越多,近似值就越准确,但需要更多的内存来计算。

查看 approx_percentile_cont 示例
SELECT approx_percentile_cont(temperature, 0.1,100) FROM air;
+-----------------------------------------------------------------+
| APPROX_PERCENTILE_CONT(air.temperature,Float64(0.1),Int64(100)) |
+-----------------------------------------------------------------+
| 53.0 |
+-----------------------------------------------------------------+

approx_percentile_cont_with_weight

使用t-digest算法返回输入值的加权近似百分位数。

approx_percentile_cont_with_weight(expression, weight, percentile)
参数描述
expression要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合
weight用作权重的表达式。可以是常量、列或函数,也可以是算术运算符的任意组合。
percentile要计算的百分位数。必须是介于 0 和 1(含)之间的浮点值。
提示

如果存在此数字或更少的唯一值,则可以期待确切的结果。质心数量越多,近似值就越准确,但需要更多的内存来计算。

查看 approx_percentile_cont_with_weight 示例
SELECT approx_percentile_cont_with_weight(temperature, 0.1,0.5) FROM air;
+-------------------------------------------------------------------------------+
| APPROX_PERCENTILE_CONT_WITH_WEIGHT(air.temperature,Float64(0.1),Float64(0.5)) |
+-------------------------------------------------------------------------------+
| 80.0 |
+-------------------------------------------------------------------------------+

sample

从给定的列中随机选择 n 条记录。

sample(expression, n)
参数描述
expression要操作的表达式。必需是表中的某一列。
n要返回的记录数量。
查看 sample 示例
SELECT sample(temperature, 5) FROM air;
+--------------------------------------+
| sample(air.temperature,Int64(5)) |
+--------------------------------------+
| [74.0, 76.0, 53.0, 56.0, 65.0, 58.0] |
+--------------------------------------+