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

quantileTimingWeighted

quantileTimingWeighted

導入バージョン: v1.1

指定された精度で、数値データ列に対して各要素の重みに基づき分位数を計算します。

結果は決定的であり(クエリの処理順序に依存しません)、Web ページの読み込み時間やバックエンドのレスポンス時間のような分布を表すシーケンスに対して最適化されています。

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

精度

次の条件を満たす場合、計算は高精度です:

  • 値の総数が 5670 を超えない。
  • 値の総数が 5670 を超えるが、ページ読み込み時間が 1024ms 未満である。

それ以外の場合、計算結果は 16ms の最も近い倍数に丸められます。

注記

ページ読み込み時間の分位数を計算する場合、この関数は quantile よりも効率的かつ高精度です。

注記

関数に値が一つも渡されない場合(quantileTimingIf を使用しているとき)、NaN が返されます。これは、このようなケースを結果が 0 になるケースと区別するためです。NaN 値のソートに関する注意事項については、ORDER BY 句 を参照してください。

構文

quantileTimingWeighted(level)(expr, weight)

別名: medianTimingWeighted

パラメータ

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

引数

  • expr — カラムの値に対する式で、Float* 型の数値を返します。負の値が関数に渡された場合、その動作は未定義です。値が 30,000(ページ読み込み時間が 30 秒を超える場合)より大きいときは、30,000 と見なされます。Float*
  • weight — シーケンス要素の重みを格納したカラム。重みはその値の出現回数です。UInt*

戻り値

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

重み付きタイミング分位数の計算

CREATE TABLE t (response_time UInt32, weight UInt32) ENGINE = Memory;
INSERT INTO t VALUES (68, 1), (104, 2), (112, 3), (126, 2), (138, 1), (162, 1);

SELECT quantileTimingWeighted(response_time, weight) FROM t;
┌─quantileTimingWeighted(response_time, weight)─┐
│                                           112 │
└───────────────────────────────────────────────┘