Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

quantileExactWeighted

quantileExactWeighted

導入バージョン: v1.1.0

各要素の重みを考慮して、数値データの数列の分位点を正確に計算します。

正確な値を得るために、渡されたすべての値を配列にまとめ、その後で部分的にソートします。 各値は、その値が weight 回存在するとみなして、重み付きでカウントされます。 このアルゴリズムではハッシュテーブルを使用します。 そのため、渡された値に同じものが多く含まれる場合、この関数が消費する RAM は quantileExact より少なくなります。 この関数は quantileExact の代わりに使用でき、重みとして 1 を指定できます。

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

構文

quantileExactWeighted(level)(expr, weight)

別名: medianExactWeighted

パラメータ

  • level — 省略可能。分位点のレベルです。0 から 1 までの定数の浮動小数点数です。level には [0.01, 0.99] の範囲の値を使用することを推奨します。デフォルト値: 0.5。level=0.5 の場合、この関数は中央値を計算します。Float*

引数

  • expr — カラム値に対する式です。結果の型は数値データ型、DateDateTime、または DateTime64 です。(U)Int* または Int128 または UInt128 または Int256 または UInt256 または Float* または Decimal* または Date または DateTime または DateTime64
  • weight — 数列の要素の重みを格納するカラムです。重みは値の出現回数を表します。UInt*

戻り値

指定したレベルの分位点です。数値データ型の場合、出力フォーマットは入力フォーマットと一致します。(U)Int* または Int128 または UInt128 または Int256 または UInt256 または Float* または Decimal* または Date または DateTime または DateTime64

厳密な重み付き分位点を計算する

CREATE TABLE t (
    n Int32,
    val UInt32
) ENGINE = Memory;

-- Insert the sample data
INSERT INTO t VALUES
(0, 3),
(1, 2),
(2, 1),
(5, 4);

SELECT quantileExactWeighted(n, val) FROM t;
┌─quantileExactWeighted(n, val)─┐
│                             1 │
└───────────────────────────────┘

関連項目

Navigation