
"์ง์ญ๋ณ ๋งค์ถ 1๋ฑ ๋งค์ฅ"์ ๊ตฌํ๋ ค๋๋ฐ, CTE 1๊ฐ์์ SUM์ด๋ ROW_NUMBER๋ฅผ ๋์์ ํ๋ ค ํ๋ค...
-- โ ๊ฐ์ SELECT์์ ๋ณ์นญ ์ฐธ์กฐ ๋ถ๊ฐ!
SELECT
SUM(amount) AS total_amount,
ROW_NUMBER() OVER(ORDER BY total_amount DESC) AS rn
-- total_amount๋ฅผ ๋ฐ๋ก ์ฐธ์กฐ ๋ชป ํจ!
WITH cte AS (
SELECT
st.region, st.store_name,
SUM(sa.amount) AS total_amount
FROM stores st
JOIN sales sa ON st.id = sa.store_id
GROUP BY st.id, st.region, st.store_name
)
| region | store_name | total_amount |
|---|---|---|
| ์์ธ | ๊ฐ๋จ์ | 800000 |
| ์์ธ | ํ๋์ | 1050000 |
| ๊ฒฝ๊ธฐ | ํ๊ต์ | 550000 |
๋งค์ฅ๋น 1์ค๋ก ์ค์ด๋ฆ!
, cte_rn AS (
SELECT *,
ROW_NUMBER() OVER(PARTITION BY region ORDER BY total_amount DESC) AS rn
FROM cte
)
| region | store_name | total_amount | rn |
|---|---|---|---|
| ์์ธ | ํ๋์ | 1050000 | 1 |
| ์์ธ | ๊ฐ๋จ์ | 800000 | 2 |
| ๊ฒฝ๊ธฐ | ํ๊ต์ | 550000 | 1 |
๋งค์ฅ๋น 1์ค์ด๋๊น ์์๊ฐ ์ ํ!
SELECT region, store_name, total_amount
FROM cte_rn
WHERE rn = 1
| region | store_name | total_amount |
|---|---|---|
| ์์ธ | ํ๋์ | 1050000 |
| ๊ฒฝ๊ธฐ | ํ๊ต์ | 550000 |
SUM(amount) OVER(PARTITION BY store_id) AS total_amount
| store_name | amount | total_amount |
|---|---|---|
| ๊ฐ๋จ์ | 500000 | 800000 |
| ๊ฐ๋จ์ | 300000 | 800000 |
| ํ๋์ | 450000 | 1050000 |
| ํ๋์ | 600000 | 1050000 |
๊ฐ์ ๋งค์ฅ์ด ์ฌ๋ฌ ์ค! ROW_NUMBER ์์๊ฐ ๊ผฌ์! ๐ฑ
SELECT st.region, st.store_name, SUM(sa.amount)
โ โ โ
GROUP BY GROUP BY ์ง๊ณํจ์ OK!
GROUP BY st.id, st.region, st.store_name
| ๋จ๊ณ | ์ญํ | ํ ๋ณํ |
|---|---|---|
| CTE 1 | GROUP BY (์ง๊ณ) | ์ค์ด๋ฆ! |
| CTE 2 | ROW_NUMBER (์์) | ์ ์ง |
| SELECT | WHERE rn = 1 (ํํฐ) | ์ค์ด๋ฆ! |
"~๋ณ 1๋ฑ์ ๊ตฌํ๋ผ" = CTE 2๊ฐ!
- GROUP BY๋ก ์ง๊ณ
- ROW_NUMBER๋ก ์์
- WHERE rn = 1
์ง๊ณ ํ ์์ = CTE 2๊ฐ! ๐ช
