ROLLUP, CUBE, GROUPING SETS๋ SQL์์ ์ง๊ณ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋ฃนํํ๋ ๋ค์ํ ๋ฐฉ์์ ๋๋ค.
์ด๋ค์ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ์ง๊ณ ์์ค์ ๊ณ์ฐํ๊ฑฐ๋ ๋ณด๊ณ ์๋ฅผ ์์ฑํ ๋ ์ ์ฉํฉ๋๋ค.
ROLLUP, CUBE, GROUPING SETS ์์ฝ ์ ๋ฆฌ
ROLLUP | ์ง์ ๋ ์ด ์์์ ๋ฐ๋ผ ๊ณ์ธต์ ์ง๊ณ๋ฅผ ์ํํฉ๋๋ค. ์๊ณ์ ์ด๊ณ๋ฅผ ํฌํจ |
CUBE | ์ง์ ๋ ์ด์ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ํด ์ง๊ณ๋ฅผ ์ํํฉ๋๋ค. ๋ค์ฐจ์ ๋ถ์์ ์ ์ฉ |
GROUPING SETS | ์ฌ์ฉ์๊ฐ ์ ์ํ ํน์ ๊ทธ๋ฃนํ ์งํฉ์ ๋ํด ์ง๊ณ๋ฅผ ์ํํฉ๋๋ค. ๊ฐ์ฅ ์ ์ฐํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ |
ํ ์ค ์์ฝ์ผ๋ก ์ธ์ฐ๊ธฐ
- ROLLUP = "์ญ ๋ง์๊ฐ๋ ์๊ณ์ ์ด๊ณ"
- ๊ทธ๋ฃนํ ์ด์ด ์์ฐจ์ ์ผ๋ก ์๊ณ๋ฅผ ํฌํจํ๋ฉด์ ์ ์ ๋ ํฐ ์ง๊ณ๋ฅผ ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
- CUBE = "๋ชจ๋ ๋ฐฉํฅ์์ ์์ ํ ์ง๊ณ"
- ํ๋ธ๋ ๋ชจ๋ ๋ฉด์ ๊ฐ์ง๊ณ ์๋ ์ ์ฒด ๋ํ์ด์ฃ . ๋ชจ๋ ๋ฐฉํฅ์ผ๋ก ๋ณผ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
- GROUPING SETS = "ํ์ํ ์งํฉ๋ง ๋ง์ถค ์ง๊ณ"
- ๋ง์ถคํ"์ฒ๋ผ ์ํ๋ ์กฐํฉ๋ง ์ ํํ ์ ์๋ค๋ ์๋ฏธ์ ๋๋ค.
1. ROLLUP
ROLLUP์ ๊ณ์ธต์ ์ง๊ณ๋ฅผ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฃนํ๋ ์ด์ ์์์ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ์ง๊ณ๋ฅผ ๊ณ์ฐํ๋ฉฐ, ์ต์ข ์ ์ผ๋ก ์ดํฉ๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ๋ณด๊ณ ์์ ์๊ณ์ ์ด๊ณ๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์์:
๋งค์ถ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ Sales ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
Year | Quarter | Revenue |
2022 | Q1 | 100 |
2022 | Q2 | 150 |
2022 | Q3 | 200 |
2022 | Q4 | 250 |
2023 | Q1 | 300 |
2023 | Q2 | 350 |
ROLLUP์ ์ฌ์ฉํ ์ฟผ๋ฆฌ:
SELECT Year, Quarter, SUM(Revenue) AS TotalRevenue
FROM Sales
GROUP BY ROLLUP(Year, Quarter);
Year | Quarter | TotalRevenue |
2022 | Q1 | 100 |
2022 | Q2 | 150 |
2022 | Q3 | 200 |
2022 | Q4 | 250 |
2022 | NULL | 700 |
2023 | Q1 | 300 |
2023 | Q2 | 350 |
2023 | NULL | 650 |
NULL | NULL | 1350 |
- ROLLUP์ Year์ Quarter์ ๋ฐ๋ผ ์ง๊ณ๋ฅผ ์ํํ๋ฉฐ, Year๋ณ๋ก ์๊ณ, ์ ์ฒด ์ด๊ณ๊น์ง ๊ณ์ฐํฉ๋๋ค.
- NULL ๊ฐ์ ์๊ณ ๋ฐ ์ด๊ณ๋ฅผ ๋ํ๋ ๋๋ค.
2. CUBE
CUBE๋ ์ฃผ์ด์ง ์ด์ ๋ํด ๊ฐ๋ฅํ ๋ชจ๋ ์กฐํฉ์ผ๋ก ์ง๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ด ๊ธฐ๋ฅ์ ๋ค์ฐจ์ ๋ถ์์ ์ ์ฉํ๋ฉฐ, ๋ณด๊ณ ์์ ๊ฐ ์ฐจ์์ ๋ํ ๋ชจ๋ ๊ต์ฐจ ์ง๊ณ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์์:
๊ฐ์ Sales ํ ์ด๋ธ์ ์ฌ์ฉํด๋ณด๊ฒ ์ต๋๋ค.
CUBE๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ:
SELECT Year, Quarter, SUM(Revenue) AS TotalRevenue
FROM Sales
GROUP BY CUBE(Year, Quarter);
Year | Quarter | TotalRevenue |
2022 | Q1 | 100 |
2022 | Q2 | 150 |
2022 | Q3 | 200 |
2022 | Q4 | 250 |
2022 | NULL | 700 |
2023 | Q1 | 300 |
2023 | Q2 | 350 |
2023 | NULL | 650 |
NULL | Q1 | 400 |
NULL | Q2 | 500 |
NULL | NULL | 1350 |
- CUBE๋ ๋ชจ๋ ๊ฐ๋ฅํ ์กฐํฉ์ ๋ํด ์ง๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
- Year์ Quarter์ ๋ํ ๋ชจ๋ ์กฐํฉ, ๊ฐ ์ด์ ๋ํ ์๊ณ, ๊ทธ๋ฆฌ๊ณ ์ด๊ณ๊น์ง ํฌํจ๋ฉ๋๋ค.
3. GROUPING SETS
GROUPING SETS๋ ์ฌ์ฉ์ ์ ์ ๊ทธ๋ฃน ์งํฉ์ ์ ์ํ์ฌ ์ง๊ณ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
ํน์ ๊ทธ๋ฃนํ๋ฅผ ์ง์ ์ง์ ํ ์ ์์ด, ROLLUP์ด๋ CUBE๋ณด๋ค ๋ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์:
Sales ํ ์ด๋ธ์์ ํน์ ๊ทธ๋ฃนํ ์งํฉ๋ง ๊ณ์ฐํ๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด๋ณด๊ฒ ์ต๋๋ค.
GROUPING SETS๋ฅผ ์ฌ์ฉํ ์ฟผ๋ฆฌ:
SELECT Year, Quarter, SUM(Revenue) AS TotalRevenue
FROM Sales
GROUP BY GROUPING SETS ((Year, Quarter), (Year), (Quarter));
Year | Quarter | TotalRevenue |
2022 | Q1 | 100 |
2022 | Q2 | 150 |
2022 | Q3 | 200 |
2022 | Q4 | 250 |
2023 | Q1 | 300 |
2023 | Q2 | 350 |
2022 | NULL | 700 |
2023 | NULL | 650 |
NULL | Q1 | 400 |
NULL | Q2 | 500 |
- GROUPING SETS๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์งํฉ์ ๋ํด์๋ง ์ง๊ณ๋ฅผ ์ํํฉ๋๋ค.
- ์ฌ๊ธฐ์๋ Year์ Quarter๋ก ๊ทธ๋ฃนํ, Year๋ก ๊ทธ๋ฃนํ, ๊ทธ๋ฆฌ๊ณ Quarter๋ก ๊ทธ๋ฃนํ๋ ์ง๊ณ๋ฅผ ๋ฐํํฉ๋๋ค.
- ํ์ํ ์กฐํฉ๋ง ์ง๊ณํ ์ ์์ด, ๋ถํ์ํ ์กฐํฉ์ ๋ํ ์ง๊ณ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.