Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileTiming

quantileTiming

首次引入版本:v1.1.0

按指定精度计算数值数据序列的分位数

结果是确定性的 (不依赖于查询处理顺序) 。 该函数针对描述分布的数据序列进行了优化,例如网页加载时间或后端响应时间。

如果在同一查询中使用多个 level 不同的 quantile* 函数,它们的内部状态不会合并 (也就是说,查询的执行效率会低于可达到的水平) 。 在这种情况下,请使用 quantiles 函数。

精度

在以下情况下,计算结果是精确的:

  • 值的总数不超过 5670。
  • 值的总数超过 5670,但页面加载时间小于 1024ms。

否则,计算结果会舍入为最接近的 16 ms 倍数。

语法

quantileTiming(level)(expr)

别名: medianTiming

参数

  • level — 可选。分位数水平。取值为 0 到 1 之间的常量浮点数。建议将 level 设为 [0.01, 0.99] 范围内的值。默认值:0.5。当 level=0.5 时,函数计算中位数。Float*

参数列表

  • expr — 基于列值计算的表达式,其结果可以是数值数据类型、DateDateTime。如果向函数传入负值,则其行为未定义。如果值大于 30,000 (页面加载时间超过 30 秒) ,则按 30,000 处理。(U)Int* or Float* or Date or DateTime

返回值

指定水平的分位数。如果没有向函数传入任何值 (使用 quantileTimingIf 时) ,则返回 NaN。这样做是为了将这类情况与结果为零的情况区分开来。Float32

示例

计算时间分位数

CREATE TABLE t (response_time UInt32) ENGINE = Memory;
INSERT INTO t VALUES (72), (112), (126), (145), (104), (242), (313), (168), (108);

SELECT quantileTiming(response_time) FROM t;
┌─quantileTiming(response_time)─┐
│                           126 │
└───────────────────────────────┘

另请参见

Navigation