メインコンテンツへスキップ
メインコンテンツへスキップ

quantileGK

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

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

構文

quantileGK(accuracy, level)(expr)

Alias: medianGK.

引数

  • accuracy — 分位数の精度を表します。正の整数の定数です。値が大きいほど誤差は小さくなります。例えば、accuracy 引数を 100 に設定した場合、計算される分位数の誤差は高い確率で 1% 以下になります。計算される分位数の精度とアルゴリズムの計算量との間にはトレードオフがあります。accuracy を大きくすると分位数を正確に計算するためにより多くのメモリと計算リソースが必要になりますが、accuracy を小さくすると計算はより高速かつメモリ効率が良くなる一方で、精度はやや低くなります。

  • level — 分位数のレベル。省略可能なパラメータ。0 から 1 の範囲の浮動小数点数の定数です。デフォルト値: 0.5。level=0.5 の場合、この関数は median を計算します。

  • expr — 数値データ型Date または DateTime のいずれかを結果とする、列の値に対する式。

戻り値

  • 指定されたレベルと精度の分位数。

Type:

  • 数値データ型入力に対しては Float64
  • 入力値が Date 型の場合は Date
  • 入力値が DateTime 型の場合は DateTime

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 │
└─────────────────────────────────────────┘

関連項目

  • [median]/sql-reference/aggregate-functions/reference/median
  • quantiles