percentile_disc_lc
返回基于输入列 expr
的离散分布的百分位数。 与 percentile_disc 的行为相同。 但是,实现算法不同。 percentile_disc 需要获取所有输入数据,并且通过合并排序获得百分位数值所消耗的内存是所有输入数据的内存。 另一方面,percentile_disc_lc 构建一个 key->count 的哈希表,因此当输入基数较低时,即使输入数据大小很大,也没有明显的内存增加。
此功能从 v3.4 开始支持。
语法
PERCENTILE_DISC_LC (expr, percentile)
参数
expr
:要计算百分位数值的列。 该列可以是任何可排序的数据类型。percentile
:要查找的值的百分位数。 它必须是 0 到 1 之间的常数浮点数。 例如,如果要查找中值,请将此参数设置为0.5
。 如果要查找第 70 个百分位的值,请指定 0.7。
返回值
返回值的数据类型与 expr
相同。
使用说明
NULL 值在计算中将被忽略。
示例
创建表 exam
并将数据插入此表。
CREATE TABLE exam (
subject STRING,
score INT
)
DISTRIBUTED BY HASH(`subject`);
INSERT INTO exam VALUES
('chemistry',80),
('chemistry',100),
('chemistry',null),
('math',60),
('math',70),
('math',85),
('physics',75),
('physics',80),
('physics',85),
('physics',99);
select * from exam order by subject;
+-----------+-------+
| subject | score |
+-----------+-------+
| chemistry | 80 |
| chemistry | 100 |
| chemistry | NULL |
| math | 60 |
| math | 70 |
| math | 85 |
| physics | 75 |
| physics | 80 |
| physics | 85 |
| physics | 99 |
+-----------+-------+
计算每个科目的中位数。
select subject, percentile_disc_lc (score, 0.5)
from exam group by subject;
输出
+-----------+--------------------------------+
| subject | percentile_disc_lc(score, 0.5) |
+-----------+--------------------------------+
| physics | 85 |
| chemistry | 100 |
| math | 70 |
+-----------+--------------------------------+