本サイトにはプロモーションが含まれています
使い方
例として、もっとも人気のあるアイテムをカテゴリーごとに取得してみます。
SELECT
* EXCEPT(rn)
FROM
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY purchases DESC) rn
FROM
data_set.item_purchases
)
WHERE
rn = 1
item_purchasesテーブル
category | item_id | purchases |
---|---|---|
drama | D001 | 30 |
drama | D002 | 5 |
drama | D003 | 70 |
action | A001 | 0 |
action | A002 | 20 |
action | A003 | 0 |
anime | N001 | 80 |
anime | N002 | 30 |
結果
category | item_id | purchases |
---|---|---|
action | A002 | 20 |
anime | N001 | 80 |
drama | D003 | 70 |
解説
以下の手順で取得しています。
- カテゴリーごとにパーティション
- パーティションごとに購入数の多い順で順位付け
- 順位=1のレコードだけ取得
①、②ROW_NUMBER() OVER (PARTITION BY category ORDER BY purchases DESC) rn
③WHERE rn = 1
最終的なクエリは以下となります。
SELECT
* EXCEPT(rn)
FROM
(
SELECT
*,
-- ①:カテゴリーごとにパーティション
-- ②:パーティションごとに購入数の多い順に順位付け
ROW_NUMBER() OVER (PARTITION BY category ORDER BY purchases DESC) rn
FROM
data_set.item_purchases
)
WHERE
-- ③:順位=1のレコードだけ取得
rn = 1
関連クエリ
より実務的なクエリを身につけるには「ビッグデータ分析・活用のためのSQLレシピ」がおすすめです。
本サイトにはプロモーションが含まれています