[SQL] 048. COLUMN을 ROW로 출력하기2
Updated:
초보자를 위한 SQL 200제 교재를 토대로 공부한 내용입니다.
오라클 SQL을 기반으로 합니다.
실습에 사용한 테이블은 정보문화사 홈페이지에서 받을 수 있습니다.
[예시]
PIVOT
으로도 열을 행으로 출력 가능하다.
내가 이해하기 쉽게 생각하면 열 값을 새로운 열로 정의해 출력한다.
PIVOT (집계 함수(값) FOR 기존 열 이름 IN (기존 열의 값))
형태로 입력한다.
기존 열 이름을 기준으로 집계한 후 기존 열의 값으로 새로운 열을 정의해 출력한다.
FROM
절에 반드시 필요한 변수만 입력하여야 한다.
-- PIVOT은 기존 열의 값을 새로운 열 이름(사실상 열)으로 만드는 것
SELECT *
FROM (SELECT DEPTNO, SAL FROM EMP)
PIVOT (SUM(SAL) FOR DEPTNO IN (10,20,30)) ;
[결과]
GROUP BY
로 부서별 합계를 구하면 합계라는 컬럼에 세 개의 값이 존재 할 것이다.
이를 전치한 형태로 출력하였다.
10 | 20 | 30 |
---|---|---|
8750 | 10875 | 9400 |
[예시2]
만약 기존 열 값이 문자라면 출력시 따옴표가 붙어서 새로운 열이 된다.
따라서 Alias를 이용해서 열 이름을 직접 변경해주는 것이 좋다.
-- 문자의 경우 따옴표가 붙어서 Alias 지정
SELECT *
FROM (SELECT JOB, SAL FROM EMP)
PIVOT (SUM(SAL) FOR JOB IN ('ANALYST' AS "ANALYST",
'CLERK' AS "CLERK",
'MANAGER' AS "MANAGER"));
[결과2]
ANALYST | CLERK | MANAGER |
---|---|---|
6000 | 4150 | 8275 |
[예시3]
SELECT
절에 JOB(직업)을 추가하였다.
-- 각 직업별, 부서별 월급 합계
SELECT *
FROM (SELECT JOB, DEPTNO, SAL FROM EMP)
PIVOT (SUM(SAL) FOR DEPTNO IN (10,20,30))
ORDER BY JOB;
[결과2]
각 직업별, 부서별 합계가 출력되었다.
FROM
절에 DEPTNO(부서번호), SAL(월급)은 PIVOT
으로 전치되어 새로운 열이 된다.
SELECT
로 JOB(직업)과 전치된 새로운 열이 출력된다고 이해하면 좋을 것 같다.
JOB | 10 | 20 | 30 |
---|---|---|---|
ANALYST | 6000 | ||
CLERK | 1300 | 1900 | 950 |
MANAGER | 2450 | 2975 | 2850 |
PRESIDENT | 5000 | ||
SALESMAN | 5600 |
Leave a comment