[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

Tags:

Categories:

Updated:

Leave a comment