> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8a08bda2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 使用 Greenwald-Khanna 算法计算数值型数据序列的分位数。

# quantileGK

<div id="quantileGK">
  ## quantileGK
</div>

引入版本：v23.4.0

使用 [Greenwald-Khanna](http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf) 算法计算数值数据序列的 [`分位数`](https://en.wikipedia.org/wiki/Quantile)。

Greenwald-Khanna 算法是一种能够以极高效率计算数据流分位数的算法。
该算法由 Michael Greenwald 和 Sanjeev Khanna 于 2001 年提出。
它广泛应用于数据库和大数据系统，尤其适用于需要对大规模数据流进行实时精确分位数计算的场景。
该算法非常高效，每处理一个数据项仅需 O(log n) 空间和 O(log log n) 时间 (其中 n 为输入大小) 。
它也具有很高的准确性，能够以较高概率给出近似分位数值。

`quantileGK` 与 ClickHouse 中的其他分位数函数不同，因为它允许用户控制近似分位数结果的精度。

**语法**

```sql theme={null}
quantileGK(accuracy, level)(expr)
```

**别名**: `medianGK`

**参数**

* `accuracy` — 分位数的精度。常量正整数。`accuracy` 值越大，误差越小。例如，如果 `accuracy` 参数设置为 100，则计算出的分位数有很高概率将误差控制在 1% 以内。计算结果的精度与算法复杂度之间需要权衡。较大的 `accuracy` 需要更多内存和计算资源，才能更精确地计算分位数；较小的 `accuracy` 则计算更快、更节省内存，但精度会略低一些。[`UInt*`](/zh/reference/data-types/int-uint)
* `level` — 可选。分位数的级别。取值范围为 0 到 1 的常量浮点数。默认值：0.5。当 `level=0.5` 时，函数计算中位数。[`Float*`](/zh/reference/data-types/float)

**参数**

* `expr` — 基于列值计算并返回数值数据类型、Date 或 DateTime 的表达式。[`(U)Int*`](/zh/reference/data-types/int-uint) 或 [`Float*`](/zh/reference/data-types/float) 或 [`Decimal*`](/zh/reference/data-types/decimal) 或 [`Date`](/zh/reference/data-types/date) 或 [`DateTime`](/zh/reference/data-types/datetime)

**返回值**

返回指定级别和精度的分位数。[`Float64`](/zh/reference/data-types/float) 或 [`Date`](/zh/reference/data-types/date) 或 [`DateTime`](/zh/reference/data-types/datetime)

**示例**

**计算不同精度级别的分位数**

```sql title=Query theme={null}
SELECT quantileGK(1, 0.25)(number + 1) FROM numbers(1000);
```

```response title=Response theme={null}
┌─quantileGK(1, 0.25)(plus(number, 1))─┐
│                                    1 │
└──────────────────────────────────────┘
```

**更高精度分位数**

```sql title=Query theme={null}
SELECT quantileGK(100, 0.25)(number + 1) FROM numbers(1000);
```

```response title=Response theme={null}
┌─quantileGK(100, 0.25)(plus(number, 1))─┐
│                                    251 │
└────────────────────────────────────────┘
```

**另请参见**

* [median](/zh/reference/functions/aggregate-functions/median)
* [quantiles](/zh/reference/functions/aggregate-functions/quantiles)
