quantileExactWeighted
引入版本:v1.1.0
精确计算数值数据序列的分位数,并考虑每个元素的权重。
为了得到精确值,所有传入的值都会汇总到一个数组中,然后对其进行部分排序。
每个值都会按照其权重进行计数,就像它实际出现了 weight 次一样。
该算法使用了哈希表。
因此,如果传入的值经常重复,与 quantileExact 相比,该函数消耗的 RAM 更少。
你也可以用此函数替代 quantileExact,并将权重指定为 1。
如果在一个查询中使用多个级别不同的 quantile* 函数,它们的内部状态不会合并 (也就是说,查询的执行效率会低于原本可达到的水平) 。
这种情况下,请使用 quantiles 函数。
语法
quantileExactWeighted(level)(expr, weight)别名: medianExactWeighted
参数
level— 可选。分位数级别。取值为 0 到 1 之间的常量浮点数。建议将level设在[0.01, 0.99]范围内。默认值:0.5。当level=0.5时,该函数计算中位数。Float*
参数
expr— 基于列值计算的表达式,结果为数值数据类型、Date、DateTime或DateTime64。(U)Int*或Int128或UInt128或Int256或UInt256或Float*或Decimal*或Date或DateTime或DateTime64weight— 包含序列成员权重的列。权重表示某个值出现的次数。UInt*
返回值
指定级别的分位数。对于数值数据类型,输出格式与输入格式一致。(U)Int* 或 Int128 或 UInt128 或 Int256 或 UInt256 或 Float* 或 Decimal* 或 Date 或 DateTime 或 DateTime64
示例
计算精确加权分位数
CREATE TABLE t (
n Int32,
val UInt32
) ENGINE = Memory;
-- Insert the sample data
INSERT INTO t VALUES
(0, 3),
(1, 2),
(2, 1),
(5, 4);
SELECT quantileExactWeighted(n, val) FROM t;┌─quantileExactWeighted(n, val)─┐
│ 1 │
└───────────────────────────────┘另请参阅