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

quantileExact

数値データ列の分位数を厳密に計算します。

正確な値を得るために、渡されたすべての値が配列にまとめられ、その配列が部分的にソートされます。したがって、この関数は O(n) のメモリを消費し、ここで n は渡された値の数です。ただし、値の数が少ない場合、この関数は非常に効率的です。

クエリ内で複数の quantile* 関数を異なるレベルで使用する場合、内部状態は結合されません(つまり、そのクエリは本来達成できる効率よりも低くなります)。この場合は、quantiles 関数を使用してください。

構文

quantileExact(level)(expr)

別名: medianExact

引数

  • level — 分位数のレベル。省略可能なパラメータ。0 から 1 の範囲の定数浮動小数点数です。level の値としては [0.01, 0.99] の範囲を使用することを推奨します。デフォルト値は 0.5 です。level=0.5 の場合、この関数は中央値を計算します。
  • expr — 数値型のデータ型Date、または DateTime となるカラム値に対する式。

返される値

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

型:

  • 数値データ型の場合、出力形式は入力形式と同じになります。例えば:

SELECT
    toTypeName(quantileExact(number)) AS `quantile`,
    toTypeName(quantileExact(number::Int32)) AS `quantile_int32`,
    toTypeName(quantileExact(number::Float32)) AS `quantile_float32`,
    toTypeName(quantileExact(number::Float64)) AS `quantile_float64`,
    toTypeName(quantileExact(number::Int64)) AS `quantile_int64`
FROM numbers(1)
   ┌─quantile─┬─quantile_int32─┬─quantile_float32─┬─quantile_float64─┬─quantile_int64─┐
1. │ UInt64   │ Int32          │ Float32          │ Float64          │ Int64          │
   └──────────┴────────────────┴──────────────────┴──────────────────┴────────────────┘

1 row in set. Elapsed: 0.002 sec.
  • 入力値が Date 型の場合は Date
  • 入力値が DateTime 型の場合は DateTime

クエリ:

SELECT quantileExact(number) FROM numbers(10)

結果:

┌─quantileExact(number)─┐
│                     5 │
└───────────────────────┘

関連項目