【BigQuery】RANK関数の使い方とは?レコードを並び替えて分析する方法を紹介

BigQuery_RANK関数 クラウドプラットフォーム

前回LAG関数の使い方について紹介しました。

LAG関数の使い方について

RANK関数とLAG関数は分析関数と言われる関数で、分析作業をするときによく使われます。

RANK関数はレコードを並び替えてから差分を求めたいときに役立ちます。

今回はレコードを並び替えて分析ができるRANK関数について紹介します。

サンプルデータ 〜ジャンル別に課金額が多いソシャゲをランキング化する〜

ここにソーシャルゲームの課金額をまとめたデータがあります。
まずは課金額が多い順にランキング化していきましょう。

ソシャゲの課金額一覧|クリックして拡大できます

RANK関数の使い方

RANK関数はこのように書き、対象カラムのデータを元に順位付けします。

RANK () OVER ([PARTITION BY ~] ORDER BY 対象カラム名 ASC(or DESC) )  

課金額が多い順にランキング化してレコードを並び替える

RANK関数を使う|クリックして拡大できます
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」を指定してジャンルに分けて課金額が多い順に並び替えてみましょう!

ジャンル毎に課金額が多い順に並び替える

RANK関数を使って課金額順に並び替える|クリックして拡大できます
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関数を使いましょう。