RANK()関数やROW_NUMBER()関数を使用する際、WHERE句に使用できないのを不便に感じていました。
しかしQUALIFY句を使えば絞り込めるということがわかったので、紹介します!
公式サイト:https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#qualify_clause
今までの私の書き方
WITH events AS (
SELECT
sync_date
, category
, revenue
, RANK() OVER (PARTITION BY sync_date ORDER BY revenue DESC) AS num
FROM
test_table
)
SELECT
* EXCEPT(num)
FROM
events
WHERE
num <= 3
QUALIFY句を使用した書き方①
SELECT
sync_date
, category
, revenue
, RANK() OVER (PARTITION BY sync_date ORDER BY revenue DESC) AS num
FROM
test_table
QUALIFY
num <= 3
QUALIFY句を使用した書き方②
出力結果に順位が必要なければ、さらに下記のように書き換え可能です。
SELECT
sync_date
, category
, revenue
FROM
test_table
QUALIFY
RANK() OVER (PARTITION BY sync_date ORDER BY revenue DESC) <= 3