SQL 聚合函数
SQL 聚合函数聚合每个组或 SQL 分区中指定列的值,并为每个组返回包含聚合值的单行。
通用聚合函数
array_agg
返回从表达式元素创建的数组。
array_agg 返回 LIST Arrow 类型。使用方括号表示法来引用返回数组中元素的索引。数组从 1 开始索引。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 array_agg 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
array_agg(temp)[3] AS '3rd_temp'
FROM home
GROUP BY room
| room | 3rd_temp |
|---|
| Kitchen | 22.7 |
| Living Room | 21.8 |
avg
返回指定列中数值的平均值。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
别名
查看 avg 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
avg(precip) AS avg_precip
FROM weather
GROUP BY location
| location | avg_precip |
|---|
| Concord | 0.027120658135283374 |
| Hayward | 0.03708029197080292 |
| San Francisco | 0.03750912408759125 |
bit_and
计算所有非空输入值的按位 AND。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 bit_and 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
bit_and(precip::BIGINT) AS precip_bit_and
FROM weather
GROUP BY location
| location | precip_bit_and |
|---|
| Concord | 0 |
| Hayward | 0 |
| San Francisco | 0 |
bit_or
计算所有非空输入值的按位 OR。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 bit_or 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
bit_or(precip::BIGINT) AS precip_bit_or
FROM weather
GROUP BY location
| location | precip_bit_or |
|---|
| Concord | 7 |
| Hayward | 7 |
| San Francisco | 7 |
bit_xor
计算所有非空输入值的按位异或 OR。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 bit_xor 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
bit_xor(precip::BIGINT) AS precip_bit_xor
FROM weather
GROUP BY location
| location | precip_bit_xor |
|---|
| Concord | 4 |
| Hayward | 6 |
| San Francisco | 4 |
bool_and
如果所有非空输入值均为 true,则返回 true,否则返回 false。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 bool_and 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
bool_and(precip > 0) AS precip_bool_and
FROM weather
GROUP BY location
| location | precip_bool_and |
|---|
| Concord | false |
| Hayward | false |
| San Francisco | false |
bool_or
如果任何非空输入值为 true,则返回 true,否则返回 false。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 bool_or 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
bool_or(precip > 0) AS precip_bool_or
FROM weather
GROUP BY location
| location | precip_bool_or |
|---|
| Concord | true |
| Hayward | true |
| San Francisco | true |
count
返回指定列中的行数。
Count 包括总计数中的空值。要从总计数中排除空值,请在 WHERE 子句中包含 <column> IS NOT NULL。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 count 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
count(precip) AS precip_count
FROM weather
GROUP BY location
| location | precip_count |
|---|
| Concord | 1094 |
| Hayward | 1096 |
| San Francisco | 1096 |
first_value
根据指定的排序,返回聚合组中的第一个元素。如果未指定排序,则返回组中的任意元素。
first_value(expression [ORDER BY expression])
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 first_value 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
first_value(temp_max ORDER BY time) AS temp_max_first_value
FROM weather
GROUP BY location
| location | temp_max_first_value |
|---|
| Concord | 59 |
| Hayward | 57 |
| San Francisco | 66 |
grouping
如果数据跨指定列聚合,则返回 1,否则如果未在结果集中聚合,则返回 0。
参数
- expression: 用于评估数据是否跨指定列聚合的表达式。可以是常量、列或函数。
查看 grouping 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
avg(temp_max) AS avg_max_temp,
grouping(location) AS grouping
FROM weather
GROUP BY GROUPING SETS ((location), ())
| location | avg_max_temp | grouping |
|---|
| Concord | 75.54379562043796 | 0 |
| Hayward | 69.12043795620438 | 0 |
| San Francisco | 67.59945255474453 | 0 |
| 70.75456204379562 | 1 |
last_value
根据指定的排序,返回聚合组中的最后一个元素。如果未指定排序,则返回组中的任意元素。
last_value(expression [ORDER BY expression])
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 last_value 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
last_value(temp_max ORDER BY time) AS temp_max_last_value
FROM weather
GROUP BY location
| location | temp_max_last_value |
|---|
| Concord | 59 |
| Hayward | 58 |
| San Francisco | 62 |
max
返回指定列中的最大值。
要同时返回最大值及其关联的时间戳,请使用 selector_max。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 max 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
max(precip) AS max_precip
FROM weather
GROUP BY location
| location | max_precip |
|---|
| Concord | 4.53 |
| Hayward | 4.34 |
| San Francisco | 4.02 |
mean
别名:avg。
返回指定列中的中值。
median(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
min
返回指定列中的最小值。
要同时返回最小值及其关联的时间戳,请使用 selector_max。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 min 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
min(temp_min) AS min_temp_min
FROM weather
GROUP BY location
| location | min_temp_min |
|---|
| Concord | 28.0 |
| Hayward | 32.0 |
| San Francisco | 35.0 |
nth_value
返回一组值中的第 n 个值。
nth_value(expression, n [ORDER BY order_expression_1, ... order_expression_n])
参数
- expression: 要从中检索第 n 个值的列或表达式。
- n: 要检索的值的位置(第 n 个),基于排序。
- order_expression_1, … order_expression_n: 要排序的表达式。可以是列或函数,以及算术运算符的任意组合。
查看 nth_value 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
nth_value(temp, 3 ORDER BY time) AS "3rd_temp"
FROM
home
GROUP BY
room
| room | 3rd_temp |
|---|
| Living Room | 21.8 |
| Kitchen | 22.7 |
string_agg
连接字符串表达式的值,并在它们之间放置分隔符值。
string_agg(expression, delimiter)
参数
- expression: 要连接的字符串表达式。可以是列或任何有效的字符串表达式。
- delimiter: 用作连接值之间分隔符的文字字符串。
查看 string_agg 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
string_agg(temp_avg::STRING, ', ') AS string_agg
FROM
weather
WHERE
time > '2020-01-01T00:00:00Z'
AND time < '2020-01-05T00:00:00Z'
GROUP BY
location
| location | string_agg |
|---|
| San Francisco | 54.0, 52.0, 54.0 |
| Hayward | 51.0, 50.0, 51.0 |
| Concord | 53.0, 49.0, 51.0 |
sum
返回指定列中所有值的总和。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 sum 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
sum(precip) AS total_precip
FROM weather
GROUP BY location
| location | total_precip |
|---|
| Concord | 29.670000000000012 |
| Hayward | 40.64 |
| San Francisco | 41.110000000000014 |
统计聚合函数
corr
返回两个数值之间的相关系数。
corr(expression1, expression2)
参数
- expression1: 要操作的第一个列或文字值。
- expression2: 要操作的第二个列或文字值。
查看 corr 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
corr(hum, temp) AS correlation
FROM home
GROUP BY room
| room | correlation |
|---|
| Living Room | 0.43665270457835725 |
| Kitchen | 0.6741766954929539 |
covar
返回一组数字对的协方差。
covar(expression1, expression2)
参数
- expression1: 要操作的第一个列或文字值。
- expression2: 要操作的第二个列或文字值。
查看 covar 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
covar(hum, temp) AS covar
FROM home
GROUP BY room
| room | covar |
|---|
| Living Room | 0.03346153846153959 |
| Kitchen | 0.11134615384615432 |
covar_pop
返回一组数字对的总体协方差。
covar_pop(expression1, expression2)
参数
- expression1: 要操作的第一个列或文字值。
- expression2: 要操作的第二个列或文字值。
查看 covar_pop 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
covar_pop(hum, temp) AS covar_pop
FROM home
GROUP BY room
| room | covar_pop |
|---|
| Kitchen | 0.10278106508875783 |
| Living Room | 0.030887573964498087 |
covar_samp
返回一组数字对的样本协方差。
covar_samp(expression1, expression2)
参数
- expression1: 要操作的第一个列或文字值。
- expression2: 要操作的第二个列或文字值。
查看 covar_samp 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
covar_samp(hum, temp) AS covar_samp
FROM home
GROUP BY room
| room | covar_samp |
|---|
| Kitchen | 0.11134615384615432 |
| Living Room | 0.03346153846153959 |
regr_avgx
计算非空因变量 expression_y 的自变量(输入)expression_x 的平均值。
regr_avgx(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_avgx 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_avgx(temp_min, temp_max) AS temp_regr_avgx
FROM weather
GROUP BY location
| location | temp_regr_avgx |
|---|
| Concord | 75.54379562043796 |
| Hayward | 69.14808043875686 |
| San Francisco | 67.59945255474454 |
regr_avgy
计算非空因变量 expression_y 的因变量(输出)expression_y 的平均值。
regr_avgy(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_avgy 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_avgy(temp_min, temp_max) AS temp_regr_avgy
FROM weather
GROUP BY location
| location | temp_regr_avgy |
|---|
| Concord | 50.153284671532845 |
| Hayward | 50.913162705667276 |
| San Francisco | 51.52372262773722 |
regr_count
计算非空成对数据点的数量。
regr_count(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_count 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_count(temp_min, temp_max) AS temp_regr_count
FROM weather
GROUP BY location
| location | temp_regr_count |
|---|
| Concord | 1096 |
| Hayward | 1094 |
| San Francisco | 1096 |
regr_intercept
计算线性回归线的 y 轴截距。对于方程 (y = kx + b),此函数返回 b。
regr_intercept(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_intercept 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_intercept(temp_min, temp_max) AS temp_regr_intercept
FROM weather
GROUP BY location
| location | temp_regr_intercept |
|---|
| Concord | 11.636281392206769 |
| Hayward | 12.876956842745152 |
| San Francisco | 19.125237647086607 |
regr_r2
计算自变量和因变量之间相关系数的平方。
regr_r2(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_r2 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_r2(temp_min, temp_max) AS temp_regr_r2
FROM weather
GROUP BY location
| location | temp_regr_r2 |
|---|
| Concord | 0.6474628308450441 |
| Hayward | 0.5166296626320914 |
| San Francisco | 0.5032317511200297 |
regr_slope
返回聚合列中非空对的线性回归线的斜率。给定输入列 Y 和 X: regr_slope(Y, X) 使用最小 RSS 拟合返回斜率(Y = k*X + b 中的 k)。
regr_slope(expression_y, expression_x)
参数
- expression_y: 要操作的 Y 表达式。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 要操作的 X 表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_slope 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_slope(temp_min, temp_max) AS temp_regr_slope
FROM weather
GROUP BY location
| location | temp_regr_slope |
|---|
| Concord | 0.5098632252058237 |
| Hayward | 0.5500688612261629 |
| San Francisco | 0.4792714105844738 |
regr_sxx
计算自变量的平方和。
regr_sxx(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_sxx 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_sxx(temp_min, temp_max) AS temp_regr_sxx
FROM weather
GROUP BY location
| location | temp_regr_sxx |
|---|
| Concord | 210751.89781021897 |
| Hayward | 99644.01096892142 |
| San Francisco | 77413.15967153282 |
regr_syy
计算因变量的平方和。
regr_syy(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_syy 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_syy(temp_min, temp_max) AS temp_regr_syy
FROM weather
GROUP BY location
| location | temp_regr_syy |
|---|
| Concord | 84618.24817518248 |
| Hayward | 58358.750457038404 |
| San Francisco | 35335.38321167884 |
regr_sxy
计算成对数据点的乘积和。
regr_sxy(expression_y, expression_x)
参数
- expression_y: 因变量。可以是常量、列或函数,以及算术运算符的任意组合。
- expression_x: 自变量。可以是常量、列或函数,以及算术运算符的任意组合。
查看 regr_sxy 查询示例
以下示例使用NOAA 旧金山湾区天气数据。
SELECT
location,
regr_sxy(temp_min, temp_max) AS temp_regr_sxy
FROM weather
GROUP BY location
| location | temp_regr_sxy |
|---|
| Concord | 107454.64233576645 |
| Hayward | 54811.06764168191 |
| San Francisco | 37101.914233576645 |
stddev
返回一组数字的标准差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 stddev 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
stddev(co) AS stddev
FROM home
GROUP BY room
| room | stddev |
|---|
| Living Room | 5.885662718931967 |
| Kitchen | 9.321879418735037 |
stddev_pop
返回一组数字的总体标准差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 stddev_pop 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
stddev_pop(co) AS stddev_pop
FROM home
GROUP BY room
| room | stddev_pop |
|---|
| Kitchen | 8.956172047894082 |
| Living Room | 5.654761830612032 |
stddev_samp
返回一组数字的样本标准差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 stddev_samp 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
stddev_samp(co) AS stddev_samp
FROM home
GROUP BY room
| room | stddev_samp |
|---|
| Living Room | 5.885662718931967 |
| Kitchen | 9.321879418735037 |
var
返回一组数字的统计方差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 var 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
var(co) AS var
FROM home
GROUP BY room
| room | var |
|---|
| Living Room | 34.64102564102564 |
| Kitchen | 86.89743589743587 |
var_pop
返回一组数字的统计总体方差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
别名
查看 var_pop 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
var_pop(co) AS var_pop
FROM home
GROUP BY room
| room | var_pop |
|---|
| Living Room | 31.976331360946745 |
| Kitchen | 80.21301775147927 |
var_population
别名:var_pop。
var_samp
返回一组数字的统计样本方差。
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
别名
查看 var_samp 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
var_samp(co) AS var_samp
FROM home
GROUP BY room
| room | var_samp |
|---|
| Kitchen | 86.89743589743587 |
| Living Room | 34.64102564102564 |
var_sample
别名:var_samp。
近似聚合函数
approx_distinct
返回使用 HyperLogLog 算法计算的近似不同输入值的数量。
approx_distinct(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
查看 approx_distinct 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
approx_distinct(co::string) AS approx_distinct
FROM home
GROUP BY room
| room | approx_distinct |
|---|
| Living Room | 7 |
| Kitchen | 8 |
返回输入值的近似中值(第 50 百分位数)。它是 approx_percentile_cont(x, 0.5) 的别名。
approx_median(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
approx_percentile_cont
使用 t-digest 算法返回输入值的近似百分位数。
approx_percentile_cont(expression, percentile, centroids)
参数
expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
percentile: 要计算的百分位数。必须是介于 0 和 1 之间的浮点值(包括 0 和 1)。
centroids: 在 t-digest 算法中使用的质心数。默认为 100。
如果唯一值的数量少于或等于此数字,则可以期望获得精确的结果。质心数越高,近似值越准确,但计算所需的内存也越多。
查看 approx_percentile_cont 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
approx_percentile_cont(temp, 0.99) AS "99th_percentile"
FROM home
GROUP BY room
| room | 99th_percentile |
|---|
| Kitchen | 23.3 |
| Living Room | 22.8 |
approx_percentile_cont_with_weight
使用 t-digest 算法返回输入值的加权近似百分位数。
approx_percentile_cont_with_weight(expression, weight, percentile)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
- weight: 用作权重的表达式。可以是常量、列或函数,以及算术运算符的任意组合。
- percentile: 要计算的百分位数。必须是介于 0 和 1 之间的浮点值(包括 0 和 1)。
查看 approx_percentile_cont_with_weight 查询示例
以下示例使用家庭传感器示例数据。
SELECT
room,
approx_percentile_cont_with_weight(temp, co, 0.99) AS "co_weighted_99th_percentile"
FROM home
GROUP BY room
| room | co_weighted_99th_percentile |
|---|
| Kitchen | 23.3 |
| Living Room | 22.8 |
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 3 Core 和本文档的反馈和错误报告。要获得支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。