๋ฐ์ํ
Oracle์ PIVOT ํจ์๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ด ๋ฐ์ดํฐ๋ก ๋ณํํ๋๋ฐ ์ฌ์ฉ๋๋ค. ํนํ, ์์ฝ ๋ฐ์ดํฐ๋ฅผ ํํํ๊ณ ๋, ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ๋ณด๊ณ ์๋ฅผ ์์ฑํ ๋ ์ ์ฉํ๋ค. Pivot์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ ฌ ํํ๋ก ๋ณํํ์ฌ ๋ณด๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค.
Pivot ํจ์์ ์ฃผ์ ๊ตฌ์กฐ
SELECT <๊ณ ์ ๋ ์ด>,
<ํผ๋ฒ๋ ์ด๋ค>
FROM (
SELECT <๋ฐ์ดํฐ ์๋ณธ>
FROM <ํ
์ด๋ธ ์ด๋ฆ>
)
PIVOT (
<์ง๊ณํจ์>(<์ง๊ณ ๋์ ์ด>)
FOR <ํผ๋ฒ ์ด>
IN (<๊ฐ1>, <๊ฐ2>, ... , <๊ฐN>)
);
- ๊ณ ์ ๋ ์ด : ๋ณํ๋์ง ์๊ณ ์ถ๋ ฅ์ ๊ทธ๋๋ก ์ ์ง๋ ์ด์ ์ง์ ํ๋ค.
- ๋ฐ์ดํฐ ์๋ณธ : ํผ๋ฒ ์์ ์ ์ํํ ํ ์ด๋ธ ๋ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ ํ๋ค.
- ์ง๊ณ ํจ์ : SUM, AVG, COUNT ๋ฑ ์ง๊ณ ์์ ์ ์ํํ ํจ์๋ฅผ ์ง์ ํ๋ค.
- ํผ๋ฒ ์ด : ํ ๋ฐ์ดํฐ๊ฐ ์ด ๋ฐ์ดํฐ๋ก ๋ณํ๋ ๊ธฐ์ค ์ด์ ์ง์ ํ๋ค.
- IN : ๋ณํํ ํน์ ๊ฐ์ ์ง์ ํ๋ค. ์ด ์ด๋ฆ์ผ๋ก ๋ํ๋๋ค.
์์ 1:๊ธฐ๋ณธ PIVOT
๋ฌธ์ : ๋ถ์๋ณ๋ก ๊ฐ ์ง์ฑ
(JOB)๋ณ ๊ธ์ฌ(SALARY)์ ํฉ๊ณ๋ฅผ ํ์ํ๋ผ
ํ
์ด๋ธ ์์ (EMPLOYEES)
Department | JOB | SALARY |
---|---|---|
HR | Manager | 5000 |
IT | Developer | 4000 |
IT | Tester | 3000 |
HR | Assistant | 2500 |
IT | Developer | 3500 |
SELECT *
FROM (
SELECT DEPARTMENT, JOB, SALARY
FROM EMPLOYEES
)
PIVOT (
SUM(SALARY)
FOR JOB IN ('Manager' as MANAGER, 'Developer' AS DEVELOPER, 'Tester' AS TESTER, 'Assistant' AS ASSISTANT)
);
๊ฒฐ๊ณผ
DEPARTMENT | MANAGER | DEVELOPER | TESTER | ASSISTANT |
---|---|---|---|---|
HR | 5000 | NULL | NULL | 2500 |
IT | NULL | 7500 | 3000 | NULL |
์์ 2:์ฌ๋ฌ ๊ณ ์ ์ด ์ฌ์ฉ
๋ฌธ์ : ๋ถ์๋ณ๋ก ๋
๋๋ณ ๋งค์ถ(SALES)๋ฅผ ์์ฝํ๋ผ
ํ
์ด๋ธ (SALES_DATA)
DEPARTMENT | YEAR | SALES |
---|---|---|
Sales | 2021 | 150000 |
Sales | 2022 | 170000 |
HR | 2021 | 50000 |
HR | 2022 | 60000 |
select *
from (
select department, year, sales
from sales_data
)
pivot (
sum(sales)
for year in (2021 as "2021", 2022 as "2022")
);
๊ฒฐ๊ณผ
department | 2021 | 2022 |
---|---|---|
Sales | 150000 | 170000 |
HR | 50000 | 60000 |
Pivot ํจ์์ ์ ์ฉํ ํ
๋์ Pivot
- Oracle Pivot์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ ์ ๋ ๊ฐ(ex. IN ์ ์ ๊ฐ)์ ์ฌ์ฉํด์ผ ํ๋ค. ๋ง์ฝ ๋์ ์ผ๋ก ์ด์ ์์ฑํ๋ ค๋ฉด, PL/SQL ๋๋ ๋์ SQL์ ์ฌ์ฉํ์ฌ ๋์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํ๋ค.
NULL ๊ฐ ์ฒ๋ฆฌ
Pivot ๊ฒฐ๊ณผ์์ ํน์ ๊ฐ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ํด๋น ์ ์ NULL ์ด ํ์๋๋ค. ํ์์ COALESCE๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋์ฒด ๊ฐ๋ฅํ๋ค.
select coalesce(manager, 0) as manager, ...
์ฌ๋ฌ ์ง๊ณ ํจ์ ์ฌ์ฉ
- pivot์ ํ ๋ฒ์ ์ฌ๋ฌ ์ง๊ณ ํจ์๋ฅผ ๊ฒฐํฉํ ์ ์๋ค. ๋์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ค์ฒฉํ์ฌ ๋ค์ค ์ง๊ณ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
Pivot๊ณผ Unpivot์ ์ฐจ์ด์
- Pivot : ํ ๋ฐ์ดํฐ๋ฅผ ์ด๋ก ๋ณํ
- Unpivot : ์ด ๋ฐ์ดํฐ๋ฅผ ํ์ผ๋ก ๋ณํ
Unpivot ์์
select *
from employees
unpivot (
salary for job in (manager, developer, tester, assistant)
);
728x90
๋ฐ์ํ
'์ ๋ฌด ํ์ ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] L3, ๋ฐฑ๋ณธ, ACL ? (0) | 2024.06.20 |
---|---|
[Security/Web] XSS(Cross-Site Scripting) (0) | 2024.06.07 |
[๋คํธ์ํฌ] ๊ณต์ธ IP vs ์ฌ์ค IP โ (0) | 2024.06.05 |
WAS-T ? (0) | 2024.06.05 |
[GIT] ์ SVN์์ GIT์ผ๋ก? (0) | 2024.05.30 |