quantileExactWeightedInterpolated
導入バージョン: v24.10.0
各要素の重みを考慮しながら、線形補間を用いて数値データの数列の分位点を計算します。
補間値を得るには、渡されたすべての値をまず配列にまとめ、その後、対応する重みに基づいてソートします。 次に、重みに基づく累積分布を構築し、weighted percentile methodを用いて分位点補間を行います。そのうえで、重みと値を使って線形補間を実行し、分位点を計算します。
1 つのクエリ内で異なるレベルの複数の quantile* 関数を使用する場合、内部状態は結合されません (つまり、クエリは本来よりも非効率に実行されます) 。
この場合は、quantiles 関数を使用してください。
quantileExactWeightedInterpolated は quantileInterpolatedWeighted よりも高精度であるため、quantileInterpolatedWeighted ではなく quantileExactWeightedInterpolated を使用することを強く推奨します。
詳細については、以下の例を参照してください。
構文
quantileExactWeightedInterpolated(level)(expr, weight)別名: medianExactWeightedInterpolated
パラメータ
level— オプション。分位点のレベルです。0 から 1 までの定数の浮動小数点数を指定します。levelの値には[0.01, 0.99]の範囲を使用することを推奨します。デフォルト値: 0.5。level=0.5の場合、この関数は中央値を計算します。Float*
引数
expr— カラム値に対する式。結果の型は数値データ型、Date、DateTime、またはDateTime64です。(U)Int*またはInt128またはUInt128またはInt256またはUInt256またはFloat*またはDecimal*またはDateまたはDateTimeまたはDateTime64weight— 数列の要素の重みを持つカラム。重みは値の出現回数です。UInt*
戻り値
指定したレベルの分位点。数値引数は Float64 を返し、Decimal、Date、DateTime、DateTime64 型の引数は入力フォーマットを維持します。Float64 または Decimal* または Date または DateTime または DateTime64
例
正確な重み付き補間分位点を計算する
CREATE TABLE t (
n Int32,
val UInt32
) ENGINE = Memory;
INSERT INTO t VALUES (0, 3), (1, 2), (2, 1), (5, 4);
SELECT quantileExactWeightedInterpolated(n, val) FROM t;┌─quantileExactWeightedInterpolated(n, val)─┐
│ 1.5 │
└───────────────────────────────────────────┘quantileInterpolatedWeightedではなくquantileExactWeightedInterpolatedを優先してください
SELECT
quantileExactWeightedInterpolated(0.99)(number, 1),
quantile(0.99)(number),
quantileInterpolatedWeighted(0.99)(number, 1)
FROM numbers(9)┌─quantileExactWeightedInterpolated(0.99)(number, 1)─┬─quantile(0.99)(number)─┬─quantileInterpolatedWeighted(0.99)(number, 1)─┐
│ 7.92 │ 7.92 │ 8 │
└────────────────────────────────────────────────────┴────────────────────────┴───────────────────────────────────────────────┘関連項目