ClickHouse/docs/ja/sql-reference/aggregate-functions/reference/quantiles.md
2024-11-18 11:58:58 +09:00

7.5 KiB

slug sidebar_position
/ja/sql-reference/aggregate-functions/reference/quantiles 177

quantiles 関数

quantiles

構文: quantiles(level1, level2, ...)(x)

すべての分位関数には、対応する分位関数もあります: quantiles, quantilesDeterministic, quantilesTiming, quantilesTimingWeighted, quantilesExact, quantilesExactWeighted, quantileExactWeightedInterpolated, quantileInterpolatedWeighted, quantilesTDigest, quantilesBFloat16, quantilesDD。これらの関数は、指定されたレベルのすべての分位数を一度で計算し、結果の値の配列を返します。

quantilesExactExclusive

数値データシーケンスの分位数を正確に計算します。

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

この関数は Excel の PERCENTILE.EXC 関数に相当し、(型 R6) に相当します。

quantileExactExclusive よりもセットレベルで効率的に動作します。

構文

quantilesExactExclusive(level1, level2, ...)(expr)

引数

パラメータ

  • level — 分位数のレベル。可能な値: (0, 1) — 境界を含まない。 Float

返される値

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

配列値の型:

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

クエリ:

CREATE TABLE num AS numbers(1000);

SELECT quantilesExactExclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x) FROM (SELECT number AS x FROM num);

結果:

┌─quantilesExactExclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x)─┐
│ [249.25,499.5,749.75,899.9,949.9499999999999,989.99,998.999]        │
└─────────────────────────────────────────────────────────────────────┘

quantilesExactInclusive

数値データシーケンスの分位数を正確に計算します。

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

この関数は Excel の PERCENTILE.INC 関数に相当し、(型 R7) に相当します。

quantileExactInclusive よりもセットレベルで効率的に動作します。

構文

quantilesExactInclusive(level1, level2, ...)(expr)

引数

パラメータ

  • level — 分位数のレベル。可能な値: [0, 1] — 境界を含む。 Float

返される値

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

配列値の型:

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

クエリ:

CREATE TABLE num AS numbers(1000);

SELECT quantilesExactInclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x) FROM (SELECT number AS x FROM num);

結果:

┌─quantilesExactInclusive(0.25, 0.5, 0.75, 0.9, 0.95, 0.99, 0.999)(x)─┐
│ [249.75,499.5,749.25,899.1,949.05,989.01,998.001]                   │
└─────────────────────────────────────────────────────────────────────┘

quantilesGK

quantilesGKquantileGK に似た動作をし、異なるレベルでの分位数を同時に計算し、配列を返します。

構文

quantilesGK(accuracy, level1, level2, ...)(expr)

返される値

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

配列値の型:

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

クエリ:

SELECT quantilesGK(1, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(1, 0.25, 0.5, 0.75)(plus(number, 1))─┐
 [1,1,1]                                          
└──────────────────────────────────────────────────┘

SELECT quantilesGK(10, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(10, 0.25, 0.5, 0.75)(plus(number, 1))─┐
 [156,413,659]                                     
└───────────────────────────────────────────────────┘


SELECT quantilesGK(100, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(100, 0.25, 0.5, 0.75)(plus(number, 1))─┐
 [251,498,741]                                      
└────────────────────────────────────────────────────┘

SELECT quantilesGK(1000, 0.25, 0.5, 0.75)(number + 1)
FROM numbers(1000)

┌─quantilesGK(1000, 0.25, 0.5, 0.75)(plus(number, 1))─┐
 [249,499,749]                                       
└─────────────────────────────────────────────────────┘