前回LAG関数の使い方について紹介しました。
RANK関数とLAG関数は分析関数と言われる関数で、分析作業をするときによく使われます。
RANK関数はレコードを並び替えてから差分を求めたいときに役立ちます。
今回はレコードを並び替えて分析ができるRANK関数について紹介します。
サンプルデータ 〜ジャンル別に課金額が多いソシャゲをランキング化する〜
ここにソーシャルゲームの課金額をまとめたデータがあります。
まずは課金額が多い順にランキング化していきましょう。
RANK関数の使い方
RANK関数はこのように書き、対象カラムのデータを元に順位付けします。
RANK () OVER ([PARTITION BY ~] ORDER BY 対象カラム名 ASC(or DESC) )
課金額が多い順にランキング化してレコードを並び替える
SELECT
RANK() OVER(ORDER BY billing DESC) AS `課金額ランキング`,
name AS `ソシャゲ名`,
genre AS `ジャンル`,
billing AS `課金額`
FROM
`sql-book-384011.sample.20230723_social_game_billing`
ORDER BY
`課金額ランキング` ASC
課金額が多い順に並び替えられました。
課金額が最も多い「モンスターストライク」には1が入り、最少額だった「パズトラ」には10が入ってますね。
次に「PARTITION BY」を指定してジャンルに分けて課金額が多い順に並び替えてみましょう!
ジャンル毎に課金額が多い順に並び替える
SELECT
RANK() OVER( PARTITION BY genre ORDER BY billing DESC) AS `ジャンル別課金額ランキング`,
name AS `ソシャゲ名`,
genre AS `ジャンル`,
billing AS `課金額`
FROM
`sql-book-384011.sample.20230723_social_game_billing`
ORDER BY
`ジャンル` ASC
「シミュレーション」「スポーツ」,「ロールプレイング」の順にそれぞれ1~3位,4位に順位付けできました。初めもジャンル毎に並べられてはいたのですが、課金が多い順にはなっていませんでした。
ジャンルのうちどのソシャゲが最も課金されているか一目で分かるようになりました。
まとめ
数が大きいレコードから順番に値を振っていくrank関数はシンプルで色んな場面で使えそうですね。「PARTITION BY」を使うとジャンル別に数字を入れてくれるので、細かい分析をするときに役立つと思いました!
ランキングを作成するときはrank関数を使いましょう。