聚合函数
聚合函数
聚合函数对一组值进行运算,计算出单个结果。
FILTER 子句
聚合函数支持 SQL 的 FILTER (WHERE ...) 子句,用于限定哪些输入行参与聚合结果的计算。
function([exprs]) FILTER (WHERE condition)示例:
SELECT
sum(salary) FILTER (WHERE salary > 0) AS sum_positive_salaries,
count(*) FILTER (WHERE active) AS active_count
FROM employees;注意:当没有行通过筛选时,COUNT 返回 0,而 SUM/AVG/MIN/MAX 返回 NULL。
WITHIN GROUP / 有序集聚合函数
部分聚合函数接受 SQL 的 WITHIN GROUP (ORDER BY ...) 子句,用于指定该聚合所依赖的排序方式。在 DataFusion 中,这一功能是可选启用的:只有当聚合函数的实现在 AggregateUDFImpl::supports_within_group_clause() 中返回 true 时,该函数才接受 WITHIN GROUP 子句。若对普通聚合函数使用 WITHIN GROUP(例如 SELECT SUM(x) WITHIN GROUP (ORDER BY x)),会在计划阶段失败并报错:“WITHIN GROUP is only supported for ordered-set aggregate functions”。
目前,支持 WITHIN GROUP 的内置聚合函数有:
percentile_cont— 精确百分位聚合(也可写作percentile_cont(column, percentile))approx_percentile_cont— 使用 t-digest 算法的近似百分位approx_percentile_cont_with_weight— 使用 t-digest 算法的加权近似百分位
注意:rank()、dense_rank() 和 percent_rank() 等排名类函数属于窗口函数,使用 OVER (...) 子句;它们并非 DataFusion 中接受 WITHIN GROUP 的有序集聚合函数。
示例(有序集聚合):
percentile_cont(0.5) WITHIN GROUP (ORDER BY value)示例(无效用法——计划器将报错):
-- This will fail: SUM is not an ordered-set aggregate
SELECT SUM(x) WITHIN GROUP (ORDER BY x) FROM t;通用函数
- any_value
- array_agg
- avg
- bit_and
- bit_or
- bit_xor
- bool_and
- bool_or
- count
- first_value
- grouping
- last_value
- max
- mean
- median
- min
- percentile_cont
- quantile_cont
- string_agg
- sum
- var
- var_pop
- var_population
- var_samp
- var_sample
any_value
返回分组中任意一个非空值;如果该分组中只包含 NULL 值,则返回 NULL。
any_value(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是各种运算符的任意组合。
示例
> SELECT any_value(column_name) FROM table_name;
+------------------------+
| any_value(column_name) |
+------------------------+
| arbitrary_value |
+------------------------+array_agg
返回由表达式元素组成的数组。如果需要排序,则按指定顺序插入元素。该聚合函数只有在排序表达式与参数表达式完全相同时,才能混合使用 DISTINCT 和 ORDER BY。
array_agg(expression [ORDER BY expression])参数
- expression:要操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT array_agg(column_name ORDER BY other_column) FROM table_name;
+-----------------------------------------------+
| array_agg(column_name ORDER BY other_column) |
+-----------------------------------------------+
| [element1, element2, element3] |
+-----------------------------------------------+
> SELECT array_agg(DISTINCT column_name ORDER BY column_name) FROM table_name;
+--------------------------------------------------------+
| array_agg(DISTINCT column_name ORDER BY column_name) |
+--------------------------------------------------------+
| [element1, element2, element3] |
+--------------------------------------------------------+avg
返回指定列中数值的平均值。
avg(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT avg(column_name) FROM table_name;
+---------------------------+
| avg(column_name) |
+---------------------------+
| 42.75 |
+---------------------------+别名
- mean
bit_and
计算所有非空输入值的按位与。
bit_and(expression)参数
- expression:要进行运算的整数表达式。可以是常量、列或函数,以及任意组合的运算符。
bit_or
计算所有非空输入值的按位或。
bit_or(expression)参数
- expression:要操作的整数表达式。可以是常量、列或函数,以及任意运算符的组合。
bit_xor
计算所有非空输入值的按位异或。
bit_xor(expression)参数
- expression:要操作的整数表达式。可以是常量、列或函数,以及任意的运算符组合。
bool_and
如果所有非空输入值都为 true,则返回 true,否则返回 false。
bool_and(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT bool_and(column_name) FROM table_name;
+----------------------------+
| bool_and(column_name) |
+----------------------------+
| true |
+----------------------------+bool_or
如果任意一个非空输入值为 true,则返回 true,否则返回 false。
bool_or(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT bool_or(column_name) FROM table_name;
+----------------------------+
| bool_or(column_name) |
+----------------------------+
| true |
+----------------------------+count
返回指定列中非空值的数量。若要在总数中包含 NULL 值,请使用 count(*)。
count(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT count(column_name) FROM table_name;
+-----------------------+
| count(column_name) |
+-----------------------+
| 100 |
+-----------------------+
> SELECT count(*) FROM table_name;
+------------------+
| count(*) |
+------------------+
| 120 |
+------------------+first_value
按照指定的排序方式返回聚合分组中的第一个元素。如果未指定排序方式,则从分组中任意返回一个元素。
first_value(expression [ORDER BY expression])参数
- expression:要进行运算的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT first_value(column_name ORDER BY other_column) FROM table_name;
+------------------------------------------------+
| first_value(column_name ORDER BY other_column) |
+------------------------------------------------+
| first_element |
+------------------------------------------------+grouping
如果数据在指定列上进行了聚合,则返回 1;如果在结果集中未对该列进行聚合,则返回 0。
grouping(expression)参数
- expression:用于评估数据是否在指定列上进行聚合的表达式。可以是常量、列或函数。
示例
> SELECT column_name, GROUPING(column_name) AS group_column
FROM table_name
GROUP BY GROUPING SETS ((column_name), ());
+-------------+--------------+
| column_name | group_column |
+-------------+--------------+
| value1 | 0 |
| value2 | 0 |
| NULL | 1 |
+-------------+--------------+last_value
根据指定的排序方式返回聚合分组中的最后一个元素。如果未指定排序方式,则从分组中返回任意一个元素。
last_value(expression [ORDER BY expression])参数
- expression:要进行运算的表达式。可以是常量、列或函数,以及任意的运算符组合。
示例
> SELECT last_value(column_name ORDER BY other_column) FROM table_name;
+-----------------------------------------------+
| last_value(column_name ORDER BY other_column) |
+-----------------------------------------------+
| last_element |
+-----------------------------------------------+max
返回指定列中的最大值。
max(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是各种运算符的任意组合。
示例
> SELECT max(column_name) FROM table_name;
+----------------------+
| max(column_name) |
+----------------------+
| 150 |
+----------------------+mean
avg 的别名。
median
返回指定列中的中位数。
median(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT median(column_name) FROM table_name;
+----------------------+
| median(column_name) |
+----------------------+
| 45.5 |
+----------------------+min
返回指定列中的最小值。
min(expression)参数
- expression:要操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT min(column_name) FROM table_name;
+----------------------+
| min(column_name) |
+----------------------+
| 12 |
+----------------------+percentile_cont
返回输入值的精确百分位数,必要时在相邻数值之间进行插值。
percentile_cont(percentile) WITHIN GROUP (ORDER BY expression)参数
- expression:要进行运算的表达式。可以是常量、列或函数,以及运算符的任意组合。
- percentile:要计算的百分位数。必须是介于 0 和 1 之间(含)的浮点值。
示例
> SELECT percentile_cont(0.75) WITHIN GROUP (ORDER BY column_name) FROM table_name;
+-----------------------------------------------------------+
| percentile_cont(0.75) WITHIN GROUP (ORDER BY column_name) |
+-----------------------------------------------------------+
| 45.5 |
+-----------------------------------------------------------+同时也支持另一种语法:
> SELECT percentile_cont(column_name, 0.75) FROM table_name;
+---------------------------------------+
| percentile_cont(column_name, 0.75) |
+---------------------------------------+
| 45.5 |
+---------------------------------------+别名
- quantile_cont
quantile_cont
percentile_cont 的别名。
string_agg
将字符串表达式的值连接起来,并在它们之间插入分隔值。如果需要排序,字符串将按指定的顺序连接。此聚合函数只有在排序表达式与第一个参数表达式完全相同时,才能混合使用 DISTINCT 和 ORDER BY。
string_agg([DISTINCT] expression, delimiter [ORDER BY expression])参数
- expression:要拼接的字符串表达式。可以是列,也可以是任意有效的字符串表达式。
- delimiter:用作拼接各值之间分隔符的字符串字面量。
示例
> SELECT string_agg(name, ', ') AS names_list
FROM employee;
+--------------------------+
| names_list |
+--------------------------+
| Alice, Bob, Bob, Charlie |
+--------------------------+
> SELECT string_agg(name, ', ' ORDER BY name DESC) AS names_list
FROM employee;
+--------------------------+
| names_list |
+--------------------------+
| Charlie, Bob, Bob, Alice |
+--------------------------+
> SELECT string_agg(DISTINCT name, ', ' ORDER BY name DESC) AS names_list
FROM employee;
+--------------------------+
| names_list |
+--------------------------+
| Charlie, Bob, Alice |
+--------------------------+sum
返回指定列中所有值的总和。
sum(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT sum(column_name) FROM table_name;
+-----------------------+
| sum(column_name) |
+-----------------------+
| 12345 |
+-----------------------+var
返回一组数字的样本方差。
var(expression)参数
- expression:要进行运算的数值表达式。可以是常量、列或函数,以及任意组合的运算符。
别名
- var_sample
- var_samp
var_pop
返回一组数字的统计总体方差。
var_pop(expression)参数
- expression:要操作的数值表达式。可以是常量、列或函数,以及任意运算符的组合。
别名
- var_population
var_population
var_pop 的别名。
var_samp
var 的别名。
var_sample
var 的别名。
统计函数
- corr
- covar
- covar_pop
- covar_samp
- nth_value
- regr_avgx
- regr_avgy
- regr_count
- regr_intercept
- regr_r2
- regr_slope
- regr_sxx
- regr_sxy
- regr_syy
- stddev
- stddev_pop
- stddev_samp
corr
返回两个数值之间的相关系数。
corr(expression1, expression2)参数
- expression1:要参与运算的第一个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
- expression2:要参与运算的第二个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT corr(column1, column2) FROM table_name;
+--------------------------------+
| corr(column1, column2) |
+--------------------------------+
| 0.85 |
+--------------------------------+covar
covar_samp 的别名。
covar_pop
返回一组数值对的总体协方差。
covar_pop(expression1, expression2)参数
- expression1:要处理的第一个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
- expression2:要处理的第二个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT covar_pop(column1, column2) FROM table_name;
+-----------------------------------+
| covar_pop(column1, column2) |
+-----------------------------------+
| 7.63333333333 |
+-----------------------------------+covar_samp
返回一组数对的样本协方差。
covar_samp(expression1, expression2)参数
- expression1:要参与运算的第一个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
- expression2:要参与运算的第二个表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT covar_samp(column1, column2) FROM table_name;
+-----------------------------------+
| covar_samp(column1, column2) |
+-----------------------------------+
| 8.25 |
+-----------------------------------+别名
- covar
nth_value
返回一组值中的第 n 个值。
nth_value(expression, n ORDER BY expression)参数
- expression:要从中获取第 n 个值的列或表达式。
- n:要获取的值的位置。正值从第一个值开始计数,起始为 1;负值从最后一个值开始反向计数,其中 -1 返回最后一个值。
示例
> SELECT dept_id, salary, NTH_VALUE(salary, 2) OVER (PARTITION BY dept_id ORDER BY salary ASC) AS second_salary_by_dept
FROM employee;
+---------+--------+-------------------------+
| dept_id | salary | second_salary_by_dept |
+---------+--------+-------------------------+
| 1 | 30000 | NULL |
| 1 | 40000 | 40000 |
| 1 | 50000 | 40000 |
| 2 | 35000 | NULL |
| 2 | 45000 | 45000 |
+---------+--------+-------------------------+regr_avgx
计算非空配对数据点中自变量(输入)表达式 x 的平均值。
regr_avgx(expression_y, expression_x)参数
- expression_y:要处理的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x:要处理的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
create table daily_sales(day int, total_sales int) as values (1,100), (2,150), (3,200), (4,NULL), (5,250);
select * from daily_sales;
+-----+-------------+
| day | total_sales |
+-----+-------------+
| 1 | 100 |
| 2 | 150 |
| 3 | 200 |
| 4 | NULL |
| 5 | 250 |
+-----+-------------+
SELECT regr_avgx(total_sales, day) AS avg_day FROM daily_sales;
+----------+
| avg_day |
+----------+
| 2.75 |
+----------+regr_avgy
计算非空配对数据点中因变量(输出)表达式_y 的平均值。
regr_avgy(expression_y, expression_x)参数
- expression_y:要处理的因变量表达式。可以是常量、列或函数,以及任意的运算符组合。
- expression_x:要处理的自变量表达式。可以是常量、列或函数,以及任意的运算符组合。
示例
create table daily_temperature(day int, temperature int) as values (1,30), (2,32), (3, NULL), (4,35), (5,36);
select * from daily_temperature;
+-----+-------------+
| day | temperature |
+-----+-------------+
| 1 | 30 |
| 2 | 32 |
| 3 | NULL |
| 4 | 35 |
| 5 | 36 |
+-----+-------------+
-- temperature as Dependent Variable(Y), day as Independent Variable(X)
SELECT regr_avgy(temperature, day) AS avg_temperature FROM daily_temperature;
+-----------------+
| avg_temperature |
+-----------------+
| 33.25 |
+-----------------+regr_count
统计非空成对数据点的数量。
regr_count(expression_y, expression_x)参数
- expression_y:要进行运算的因变量表达式。可以是常量、列或函数,以及各种运算符的任意组合。
- expression_x:要进行运算的自变量表达式。可以是常量、列或函数,以及各种运算符的任意组合。
示例
create table daily_metrics(day int, user_signups int) as values (1,100), (2,120), (3, NULL), (4,110), (5,NULL);
select * from daily_metrics;
+-----+---------------+
| day | user_signups |
+-----+---------------+
| 1 | 100 |
| 2 | 120 |
| 3 | NULL |
| 4 | 110 |
| 5 | NULL |
+-----+---------------+
SELECT regr_count(user_signups, day) AS valid_pairs FROM daily_metrics;
+-------------+
| valid_pairs |
+-------------+
| 3 |
+-------------+regr_intercept
计算线性回归直线的 y 轴截距。对于方程 y = kx + b,该函数返回 b。
regr_intercept(expression_y, expression_x)参数
- expression_y:要进行运算的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x:要进行运算的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
create table weekly_performance(week int, productivity_score int) as values (1,60), (2,65), (3, 70), (4,75), (5,80);
select * from weekly_performance;
+------+---------------------+
| week | productivity_score |
+------+---------------------+
| 1 | 60 |
| 2 | 65 |
| 3 | 70 |
| 4 | 75 |
| 5 | 80 |
+------+---------------------+
SELECT regr_intercept(productivity_score, week) AS intercept FROM weekly_performance;
+-----------+
| intercept |
+-----------+
| 55 |
+-----------+regr_r2
计算自变量与因变量之间相关系数的平方。
regr_r2(expression_y, expression_x)参数
- expression_y:要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x:要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
create table weekly_performance(day int ,user_signups int) as values (1,60), (2,65), (3, 70), (4,75), (5,80);
select * from weekly_performance;
+-----+--------------+
| day | user_signups |
+-----+--------------+
| 1 | 60 |
| 2 | 65 |
| 3 | 70 |
| 4 | 75 |
| 5 | 80 |
+-----+--------------+
SELECT regr_r2(user_signups, day) AS r_squared FROM weekly_performance;
+-----------+
| r_squared |
+-----------+
| 1.0 |
+-----------+regr_slope
返回聚合列中非空数据对的线性回归直线斜率。给定输入列 Y 和 X:regr_slope(Y, X) 使用最小残差平方和(RSS)拟合,返回斜率(即 Y = k*X + b 中的 k)。
regr_slope(expression_y, expression_x)参数
- expression_y:要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x:要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
create table weekly_performance(day int, user_signups int) as values (1,60), (2,65), (3, 70), (4,75), (5,80);
select * from weekly_performance;
+-----+--------------+
| day | user_signups |
+-----+--------------+
| 1 | 60 |
| 2 | 65 |
| 3 | 70 |
| 4 | 75 |
| 5 | 80 |
+-----+--------------+
SELECT regr_slope(user_signups, day) AS slope FROM weekly_performance;
+--------+
| slope |
+--------+
| 5.0 |
+--------+regr_sxx
计算自变量的平方和。
regr_sxx(expression_y, expression_x)参数
- expression_y:要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x:要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
create table study_hours(student_id int, hours int, test_score int) as values (1,2,55), (2,4,65), (3,6,75), (4,8,85), (5,10,95);
select * from study_hours;
+------------+-------+------------+
| student_id | hours | test_score |
+------------+-------+------------+
| 1 | 2 | 55 |
| 2 | 4 | 65 |
| 3 | 6 | 75 |
| 4 | 8 | 85 |
| 5 | 10 | 95 |
+------------+-------+------------+
SELECT regr_sxx(test_score, hours) AS sxx FROM study_hours;
+------+
| sxx |
+------+
| 40.0 |
+------+regr_sxy
计算成对数据点乘积之和。
regr_sxy(expression_y, expression_x)参数
- expression_y:要进行运算的因变量表达式。可以是常量、列或函数,以及任意的运算符组合。
- expression_x:要进行运算的自变量表达式。可以是常量、列或函数,以及任意的运算符组合。
示例
create table employee_productivity(week int, productivity_score int) as values(1,60), (2,65), (3,70);
select * from employee_productivity;
+------+--------------------+
| week | productivity_score |
+------+--------------------+
| 1 | 60 |
| 2 | 65 |
| 3 | 70 |
+------+--------------------+
SELECT regr_sxy(productivity_score, week) AS sum_product_deviations FROM employee_productivity;
+------------------------+
| sum_product_deviations |
+------------------------+
| 10.0 |
+------------------------+regr_syy
计算因变量的平方和。
regr_syy(expression_y, expression_x)参数
- expression_y:要进行运算的因变量表达式。可以是常量、列或函数,以及任意的运算符组合。
- expression_x:要进行运算的自变量表达式。可以是常量、列或函数,以及任意的运算符组合。
示例
create table employee_productivity(week int, productivity_score int) as values (1,60), (2,65), (3,70);
select * from employee_productivity;
+------+--------------------+
| week | productivity_score |
+------+--------------------+
| 1 | 60 |
| 2 | 65 |
| 3 | 70 |
+------+--------------------+
SELECT regr_syy(productivity_score, week) AS sum_squares_y FROM employee_productivity;
+---------------+
| sum_squares_y |
+---------------+
| 50.0 |
+---------------+stddev
返回一组数字的标准差。
stddev(expression)参数
- expression:要进行操作的表达式。可以是常量、列或函数,也可以是各种运算符的任意组合。
示例
> SELECT stddev(column_name) FROM table_name;
+----------------------+
| stddev(column_name) |
+----------------------+
| 12.34 |
+----------------------+别名
- stddev_samp
stddev_pop
返回一组数字的总体标准差。
stddev_pop(expression)参数
- expression:要进行运算的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT stddev_pop(column_name) FROM table_name;
+--------------------------+
| stddev_pop(column_name) |
+--------------------------+
| 10.56 |
+--------------------------+stddev_samp
stddev 的别名。
近似函数
approx_distinct
返回使用 HyperLogLog 算法计算出的输入值近似去重数量。
approx_distinct(expression)参数
- expression:要操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT approx_distinct(column_name) FROM table_name;
+-----------------------------------+
| approx_distinct(column_name) |
+-----------------------------------+
| 42 |
+-----------------------------------+approx_median
返回输入值的近似中位数(第 50 百分位数)。它是 approx_percentile_cont(0.5) WITHIN GROUP (ORDER BY x) 的别名。
approx_median(expression)参数
- expression:要操作的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
示例
> SELECT approx_median(column_name) FROM table_name;
+-----------------------------------+
| approx_median(column_name) |
+-----------------------------------+
| 23.5 |
+-----------------------------------+approx_percentile_cont
使用 t-digest 算法返回输入值的近似百分位数。
approx_percentile_cont(percentile [, centroids]) WITHIN GROUP (ORDER BY expression)参数
- expression:要进行运算的表达式。可以是常量、列或函数,也可以是任意运算符的组合。
- percentile:要计算的百分位数。必须是介于 0 和 1 之间(包含 0 和 1)的浮点值。
- centroids:t-digest 算法中使用的质心数量。默认值为 100。数值越大,近似结果越精确,但占用的内存也越多。
示例
> SELECT approx_percentile_cont(0.75) WITHIN GROUP (ORDER BY column_name) FROM table_name;
+------------------------------------------------------------------+
| approx_percentile_cont(0.75) WITHIN GROUP (ORDER BY column_name) |
+------------------------------------------------------------------+
| 65.0 |
+------------------------------------------------------------------+
> SELECT approx_percentile_cont(0.75, 100) WITHIN GROUP (ORDER BY column_name) FROM table_name;
+-----------------------------------------------------------------------+
| approx_percentile_cont(0.75, 100) WITHIN GROUP (ORDER BY column_name) |
+-----------------------------------------------------------------------+
| 65.0 |
+-----------------------------------------------------------------------+也支持另一种语法:
> SELECT approx_percentile_cont(column_name, 0.75) FROM table_name;
+-----------------------------------------------+
| approx_percentile_cont(column_name, 0.75) |
+-----------------------------------------------+
| 65.0 |
+-----------------------------------------------+
> SELECT approx_percentile_cont(column_name, 0.75, 100) FROM table_name;
+----------------------------------------------------------+
| approx_percentile_cont(column_name, 0.75, 100) |
+----------------------------------------------------------+
| 65.0 |
+----------------------------------------------------------+approx_percentile_cont_with_weight
使用 t-digest 算法返回输入值的加权近似百分位数。
approx_percentile_cont_with_weight(weight, percentile [, centroids]) WITHIN GROUP (ORDER BY expression)参数
- expression:要操作的表达式。可以是常量、列或函数,以及任意组合的运算符。
- weight:用作权重的表达式。可以是常量、列或函数,以及任意组合的算术运算符。
- percentile:要计算的百分位数。必须是介于 0 和 1 之间(含端点)的浮点值。
- centroids:t-digest 算法中使用的质心数量。默认值为 100。数值越大,近似结果越精确,但占用的内存也越多。
示例
> SELECT approx_percentile_cont_with_weight(weight_column, 0.90) WITHIN GROUP (ORDER BY column_name) FROM table_name;
+---------------------------------------------------------------------------------------------+
| approx_percentile_cont_with_weight(weight_column, 0.90) WITHIN GROUP (ORDER BY column_name) |
+---------------------------------------------------------------------------------------------+
| 78.5 |
+---------------------------------------------------------------------------------------------+
> SELECT approx_percentile_cont_with_weight(weight_column, 0.90, 100) WITHIN GROUP (ORDER BY column_name) FROM table_name;
+--------------------------------------------------------------------------------------------------+
| approx_percentile_cont_with_weight(weight_column, 0.90, 100) WITHIN GROUP (ORDER BY column_name) |
+--------------------------------------------------------------------------------------------------+
| 78.5 |
+--------------------------------------------------------------------------------------------------+还支持另一种语法:
> SELECT approx_percentile_cont_with_weight(column_name, weight_column, 0.90) FROM table_name;
+----------------------------------------------------------------------+
| approx_percentile_cont_with_weight(column_name, weight_column, 0.90) |
+----------------------------------------------------------------------+
| 78.5 |
+----------------------------------------------------------------------+评论
登录后参与评论
KnowForge