> ## 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) アルゴリズムを使用して、数値データ列の [`quantile`](https://en.wikipedia.org/wiki/Quantile) を計算します。

Greenwald-Khanna アルゴリズムは、データストリームに対する分位点を非常に効率よく計算するためのアルゴリズムです。
このアルゴリズムは、2001 年に Michael Greenwald と Sanjeev Khanna によって提案されました。
大規模なデータストリームに対して正確な分位点をリアルタイムで計算する必要があるデータベースやビッグデータシステムで広く利用されています。
このアルゴリズムは非常に効率的で、各項目あたり O(log n) の空間と O(log log n) の時間しか必要としません (ここで、n は入力サイズです) 。
また、精度も非常に高く、高い確率で近似的な分位点の値を返します。

`quantileGK` は ClickHouse の他の quantile 関数とは異なり、近似分位点の精度をユーザーが制御できます。

**構文**

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

**別名**: `medianGK`

**パラメータ**

* `accuracy` — 分位点の精度を指定します。正の定数整数です。`accuracy` の値が大きいほど、誤差は小さくなります。たとえば、`accuracy` 引数を 100 に設定すると、高い確率で、計算される分位点の誤差は 1% 以下になります。計算される分位点の精度と、アルゴリズムの計算の複雑さにはトレードオフがあります。`accuracy` を大きくすると、分位点を正確に計算するために、より多くのメモリとコンピュートリソースが必要になります。一方、`accuracy` 引数を小さくすると、精度はわずかに低下するものの、より高速でメモリ効率の高い計算が可能です。[`UInt*`](/ja/reference/data-types/int-uint)
* `level` — 任意。分位点のレベルです。0 から 1 までの定数浮動小数点数。デフォルト値: 0.5。`level=0.5` の場合、この関数は中央値を計算します。[`Float*`](/ja/reference/data-types/float)

**引数**

* `expr` — カラム値に対する式で、数値データ型、Date、または DateTime になります。[`(U)Int*`](/ja/reference/data-types/int-uint) または [`Float*`](/ja/reference/data-types/float) または [`Decimal*`](/ja/reference/data-types/decimal) または [`Date`](/ja/reference/data-types/date) または [`DateTime`](/ja/reference/data-types/datetime)

**戻り値**

指定したレベルと精度の分位点を返します。[`Float64`](/ja/reference/data-types/float) または [`Date`](/ja/reference/data-types/date) または [`DateTime`](/ja/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](/ja/reference/functions/aggregate-functions/median)
* [quantiles](/ja/reference/functions/aggregate-functions/quantiles)
