[SQL] RANK ウインドウ関数の順位の母数を取得する

[SQL] RANK ウインドウ関数の順位の母数を取得する

ウインドウ関数(分析関数)のRANKでPARTITIONを使って順位を取得する際に、順位全体の母数を取得する方法です。

順位全体の母数を取得したい

例として、年齢ごとの得点の順位をRANK関数を使って求めます。
各個人の順位は1位、2位と求めることが出来ますが、母数を知りたい場合があります。
10人中1位(1/10)など

PARTITIONを指定しなければクエリ結果の全件数が母数となります。
PARTITIONを使って年齢ごとの母数を取得する場合は、ウインドウ関数のCOUNTに同じPARTITIONの条件を指定することで各年齢ごとの母数を取得できます。

 

SELECT a.id
    , a.age
    , a.point
    , RANK() OVER (PARTITION BY a.age ORDER BY a.point DESC) as rank
    , COUNT(*) OVER (PARTITION BY a.age) as total
FROM (
    SELECT 1 AS id, 10 AS age, 10 AS point
    UNION ALL
    SELECT 2 AS id, 20 AS age, 20 AS point
    UNION ALL
    SELECT 3 AS id, 10 AS age, 30 AS point
) AS a

 

プログラミングカテゴリの最新記事