11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【BigQuery】行に順番をつける関数を使ってランキング作成してみた【RANK関数】

Last updated at Posted at 2019-03-07

##概要
BigQueryで、カラムに順番をつける関数を紹介します。
・RANK関数
・DENSE_RANK関数
・ROW_NUMBER関数

##使用テーブル: item_table

user_id item price
A みかん 50
A りんご 100
B りんご 100
A もやし 19
B りんご 90

image.png

##研修1:RANK関数 値段の高い順に、列にランキングを追加する

price欄の値で高い順から順番に数字を振ります。

BigQuery 研修1

SELECT
  user_id,
  item,
  price,
  RANK() OVER (ORDER BY price DESC) AS rank_p
FROM
  test1.item_table;

上記を実行すると、
image.png

rank_pの列が追加されました。
一番priceが高い1行目、2行目のりんごが’1位’となり、降順でランキングができました。RANK() OVER (ORDER BY price DESC) という構文のorder by以降にランキングをつけるカラム名を入れ、 DESC を加えることで降順(値が大きいものから低いもの)でランクが割り振られました。
DESCを記載しなければ、昇順でランクが振られます。

#研修2:DENSE_RANK関数 値段の高い順に、列に’重複しない’ランキングを追加する

研修1では、最も高いpriceが2つあったため、ランクのカラムに2つ’1’が立ち、’2’がなく、’3’が立ちました。
今度は重複した値があってもランクの数字を飛ばさないでランキングします。

BigQuery 研修2

SELECT
  user_id,
  item,
  price,
  DENSE_RANK() OVER (ORDER BY price DESC) AS rank_p
FROM
  test1.item_table;

上記を実行すると、
image.png

しっかり1から順番にランクのカウントがされました。

##研修3:ROW_NUMBER関数 上から連番をつける
今度は先ほどまでとは違い、カラムの上から順番に連番付けていきます。行番号を付与するときに使えます。

BigQuery 研修3_1

SELECT
  user_id,
  item,
  price,
  ROW_NUMBER() OVER (ORDER BY price DESC)AS rank_p
FROM
  test1.item_table;

上記を実行すると、

image.png

無事1行目からランクが付加されました。
ちなみに特に何も指定せず、row_number()over()の列を追加すると。。。

BigQuery3_2
SELECT
  user_id,
  item,
  price,
  ROW_NUMBER() OVER ()AS rank_p
FROM
  test1.item_table;

image.png

ランダムで行を選び、上から連番で番号を振ってくれます。

#まとめ

今回扱った関数、
RANK関数は重複した番号は飛ばして、連番を振ります。
DENSE_RANK関数は重複した番号を飛ばさず、連番を振ります。
ROW_NUMBER関数は行に1つずつ重複のない、連番を振ります。

これら異なった関数を、臨機応変に活用し、使いこなせるようになりたいです💛

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?