6-1-13 PERCENTILE_CONT(パーセント値に相当する、補間された値を取得する)

PERCENTILE_CONT関数は、ソート項目でソートした結果から、指定されたパーセント値に相当する行の値を返します。

指定されたパーセント値が行と行の間に位置する場合、前後の行により補間された値を返します。

同様の関数にPERCENTILE_DISC関数があります。この関数との違いは、 「PERCENTILE_CONT関数とPERCENTILE_DISC関数の違い」を参照してください。

書式

PERCENTILE_CONT(percent) WITHIN GROUP(ORDER BY expression [ASC|DESC]) OVER( [PARTITION BY partition_list])

引数

  • percent

    パーセント値を指定します。0~1の範囲でDOUBLE型の値を指定します。列や式は指定できません。

  • expression

    取得したいNUMERIC型の列または式を指定します。NULL値は無視されます。

    昇順(ASC)または降順(DESC)のいずれかのソート順を指定できます。ソート順が未指定の場合は昇順になります。

    パーティション項目が指定されている場合は、パーティション項目ごとにソートします。

  • partition_list

    パーティション項目(列または式)を指定します。

    パーティション項目が指定されている場合は、パーティション項目ごとにパーセント値に相当する行の値を計算します。パーティション項目が指定されていない場合は、全体を1つのパーティションとしてパーセント値に相当する行の値を計算します。

戻り値

パーセント値に相当する行の値を返します。戻り値は精度なしのNUMERIC型になります。

実行例

次のテーブルにSQL文を実行した場合の実行例を示します。

SELECT 名前, クラス, 点数 FROM 成績;

名前

クラス

点数

さくら

A

95

ぼたん

A

90

れんげ

A

80

ひまわり

B

70

あやめ

B

85

すみれ

C

80

実行例1

「点数」の高い順に上位45%に相当する値を計算します。

SELECT PERCENTILE_CONT(0.45) WITHIN GROUP(ORDER BY 点数 DESC) AS PERCENTILE_CONT FROM 成績;
1. 実行結果

PERCENTILE_CONT

83.75



実行例2

「クラス」ごとに「点数」の高い順にソートし、上位45%に相当する値を計算します。

SELECT クラス, PERCENTILE_CONT(0.45) WITHIN GROUP(ORDER BY 点数 DESC) AS PERCENTILE_CONT FROM 成績 GROUP BY クラス;
2. 実行結果

クラス

PERCENTILE_CONT

A

90.5

B

78.25

C

80



実行例3

「クラス」ごとに「点数」の高い順にソートし、上位45%に相当する値を計算します。すべての行に上位45%に相当する値を返します。

SELECT 名前, クラス, 点数, PERCENTILE_CONT(0.45) WITHIN GROUP(ORDER BY 点数 DESC) OVER() AS PERCENTILE_CONT_OVER FROM 成績;
3. 実行結果

名前

クラス

点数

PERCENTILE_CONT_OVER

さくら

A

95

83.75

ぼたん

A

90

83.75

あやめ

B

85

83.75

れんげ

A

80

83.75

すみれ

C

80

83.75

ひまわり

B

70

83.75



実行例4

「点数」の高い順にソートし、上位45%に相当する値を計算します。すべての行に上位45%に相当する値を返します。

SELECT 名前, クラス, 点数, PERCENTILE_CONT(0.25) WITHIN GROUP(ORDER BY 点数 DESC) OVER(PARTITION BY クラス) AS PERCENTILE_CONT_OVER FROM 成績;
4. 実行結果

名前

クラス

点数

PERCENTILE_CONT_OVER

さくら

A

95

92.5

ぼたん

A

90

92.5

れんげ

A

80

92.5

あやめ

B

85

81.25

ひまわり

B

70

81.25

すみれ

C

80

80



PERCENTILE_CONT関数とPERCENTILE_DISC関数の違い

PERCENTILE_CONT関数とPERCENTILE_DISC関数は同様の機能をもつ関数ですが、指定されたパーセント値が行と行の間に位置する場合に、動作が異なります。

PERCENTILE_CONT関数は前後の行で補間された値が返り、PERCENTILE_DISC関数は、指定されたパーセント値を超える行の中で、最小値となる値が返ります。

たとえば、行の値がそれぞれ、1、2、3、4で、50%の値を取得しようとした場合、50%は2と3の間になります。この場合、各関数の戻り値は次のとおり異なります。

  • PERCENTILE_CONT関数

    2と3(前後の行)でデータが補間されて2.5が返ります。

  • PERCENTILE_DISC関数

    指定したパーセント値を超える行の中で、最小値となる行の値3が返ります。