QUALIFY句は、ウィンドウ関数の結果に基づいて行をフィルタリングする時に利用します。

従来のWHERE句だと指定できませんでしたが、QUALIFY句を利用すればウィンドウ関数によって生成された新しい列を指定できるところが大きなポイントです。

以下はコード例

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## product単位で平均価格を算出した上で、平均価格が500以上のもののみ抽出するクエリ例
SELECT
product,
AVG(price) AS avgPrice
FROM
dataset.table
GROUP BY
1
QUALIFY
avgPrice >= 500
## product単位で平均価格を算出した上で、平均価格が500以上のもののみ抽出するクエリ例 SELECT product, AVG(price) AS avgPrice FROM dataset.table GROUP BY 1 QUALIFY avgPrice >= 500
## product単位で平均価格を算出した上で、平均価格が500以上のもののみ抽出するクエリ例

SELECT
  product,
  AVG(price) AS avgPrice
FROM
  dataset.table
GROUP BY
  1
QUALIFY
  avgPrice >= 500
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
## userId単位でcreatedAtの連番を付与して、2番目の登録情報を取得するクエリ例
SELECT
userId,
createdAt,
ROW_NUMBER() OVER (PARTITION BY userId ORDER BY createdAt) AS rownum
FROM
dataset.table
QUALIFY
rownum = 2
## userId単位でcreatedAtの連番を付与して、2番目の登録情報を取得するクエリ例 SELECT userId, createdAt, ROW_NUMBER() OVER (PARTITION BY userId ORDER BY createdAt) AS rownum FROM dataset.table QUALIFY rownum = 2
## userId単位でcreatedAtの連番を付与して、2番目の登録情報を取得するクエリ例

SELECT
  userId,
  createdAt,
  ROW_NUMBER() OVER (PARTITION BY userId ORDER BY createdAt) AS rownum
FROM
  dataset.table
QUALIFY
  rownum = 2

qualifyを利用しなければ、with句を使うか、服問い合わせで階層化してからwhere句に条件追加してましたが、その手間がなくなり、コード量も減らせるのがありがたい感じです。


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事