quantileGK
使用 分位数 的 Greenwald-Khanna 算法计算数值数据序列的 分位数 。Greenwald-Khanna 算法是一种用于高效计算数据流分位数的算法。它由 Michael Greenwald 和 Sanjeev Khanna 于 2001 年提出。它广泛应用于数据库和大数据系统中,在这些系统中,需要实时计算大型数据流上的准确分位数。该算法非常高效,每个项目仅占用 O(log n) 空间和 O(log log n) 时间(其中 n 是输入的大小)。它也非常准确,以高概率提供近似分位数。
quantileGK
与 ClickHouse 中的其他分位数函数不同,因为它使用户能够控制近似分位数结果的准确性。
语法
quantileGK(accuracy, level)(expr)
别名:medianGK
。
参数
-
accuracy
— 分位数的准确性。常量正整数。准确性值越大,误差越小。例如,如果 accuracy 参数设置为 100,则计算出的分位数将以高概率具有不大于 1% 的误差。计算分位数的准确性与算法的计算复杂度之间存在权衡。较大的准确性需要更多的内存和计算资源来准确计算分位数,而较小的 accuracy 参数允许更快、更节省内存的计算,但准确性略低。 -
level
— 分位数水平。可选参数。从 0 到 1 的常量浮点数。默认值:0.5。在level=0.5
时,该函数计算 中位数 。
返回值
- 指定水平和准确性的分位数。
类型
示例
SELECT quantileGK(1, 0.25)(number + 1)
FROM numbers(1000)
┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│ 1 │
└──────────────────────────────────────┘
SELECT quantileGK(10, 0.25)(number + 1)
FROM numbers(1000)
┌─quantileGK(10, 0.25)(plus(number, 1))─┐
│ 156 │
└───────────────────────────────────────┘
SELECT quantileGK(100, 0.25)(number + 1)
FROM numbers(1000)
┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│ 251 │
└────────────────────────────────────────┘
SELECT quantileGK(1000, 0.25)(number + 1)
FROM numbers(1000)
┌─quantileGK(1000, 0.25)(plus(number, 1))─┐
│ 249 │
└─────────────────────────────────────────┘
另请参阅