SQL/SQL Grammar
[BigQuery] QUALIFY ๊ตฌ๋ฌธ
ISLA!
2024. 5. 20. 22:21
๐ฏ QUALIFY
- ์ผ๋ฐ์ ์ผ๋ก ์๋์ฐ ํจ์์ ํจ๊ป ์ฌ์ฉ๋จ
- ํน์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ํ์ ์ ํํ๊ฑฐ๋ ์ ๊ฑฐํ๋ ๋ฐ ์ฌ์ฉ๋จ
- ์๋์ฐ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ํํฐ๋ง ํ๋๋ฐ ์ ์ฉํจ
์์ ์ฟผ๋ฆฌ(1) : with ์ ๊ณผ where ์ฌ์ฉ
- order_id(์ฃผ๋ฌธ ์์ด๋), amount(์ฃผ๋ฌธ ๊ธ์ก)์ผ๋ก ์ด๋ฃจ์ด์ง ํ ์ด๋ธ(orders)์์ ์ฃผ๋ฌธ ์์ด๋๋ณ๋ก ๊ฐ์ฅ ๋์ ๊ฐ๊ฒฉ์ ๋ฌผ๊ฑด๋ง ๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด with ์ ์ ์ด์ฉํด ์๋ธ์ฟผ๋ฆฌ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ์ ์๋ค.
- where ์ ๋ก ์กฐ๊ฑด์ ๊ฑฐ๋ ๊ฒฝ์ฐ
WITH max_amount_per_order AS (
SELECT
order_id,
amount,
MAX(amount) OVER (PARTITION BY order_id) AS max_amount
FROM
orders
)
SELECT
order_id,
amount
FROM
max_amount_per_order
WHERE
amount = max_amount;
WHERE ์์ ์ฐจ์ด : ์ ์ฉ ์์
- where
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ ์ ํํฐ๋ง์ ์ํํจ
- ๋ฐ๋ผ์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ํฌํจ๋๋ ํ์ ๋ชจ๋ where ๊ตฌ๋ฌธ์ ์กฐ๊ฑด์ ์ถฉ์กฑํ๊ฒ ๋จ
- qualify
- ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ํ์ ์๋์ฐ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ ํํฐ๋ง
- ๋ฐ๋ผ์ ์๋์ฐ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ์ ์ฉ๋จ
- ์ฆ, ์๋์ฐ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๊ฒฐ๊ณผ์ ๊ธฐ๋ฐํ์ฌ ํ์ ํํฐ๋ง ํ๋๋ฐ ์ฌ์ฉ๋จ
์์ ์ฟผ๋ฆฌ(2) : qualify ์ฌ์ฉ
- ์์ ์์ ์ฟผ๋ฆฌ๋ฅผ QUALIFY ๊ตฌ๋ฌธ์ผ๋ก ์ข ๋ ์งง๊ฒ ์ฟผ๋ฆฌ๋ฅผ ์งค ์ ์๋ค.
- ๊ฐ ์ฃผ๋ฌธ๋ณ ์ต๋๊ธ์ก๊ณผ ๋์ผํ ๊ธ์ก์ ๊ฐ์ง ํ์ ์ ํํ๊ฒ ๋์ด ๋์ผํ ๊ฒฐ๊ณผ๊ฐ ๋๋๋ค
SELECT
order_id,
amount
FROM
orders
QUALIFY
amount = MAX(amount) OVER (PARTITION BY order_id);
์ฐธ๊ณ ์๋ฃ : https://docs.aws.amazon.com/ko_kr/redshift/latest/dg/r_QUALIFY_clause.html
728x90