73megane

シチサンメガネ

【PostgreSQL】Window関数(RANK, ROW_NUMBER)の使い方

Window関数(RANK, ROW_NUMBER)の結果イメージ

f:id:shnkb:20190718073926p:plain
RANK関数とROW_NUMBER関数の結果イメージ

現在、仕事でPostgreSQLを使っている。
データ分析・集計の仕事をしている中で、rank付けして1位のものだけ取得したい要件があり、rank関数の使い方の紹介&備忘。

関数説明

最初RANKを使っていたが、ROW_NUMBERを使うことにした。
同じ値があった時に別の番号を振りたかった。

関数 説明
RANK 同順があった場合に次の順位を飛ばす。例:1位、1位、3位、4位・・・
ROW_NUMBER 同じ値があった場合でも、別の番号を振る。例:1位が同じ値だったとしても1位、2位、3位、4位・・・

クエリ

こんなイメージのクエリ

SELECT
    t2.*
FROM (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY emp_id ORDER BY create_month ASC) AS ranking
    FROM t1
) t2
WHERE
    t2.ranking = 1;

参考