반응형
1. 행(row) -> 컬럼(column) : sum + decode 또는 pivot문
2. 컬럼(column) -> 행(row) : unpivot문
unpivot문이 필요한 이유 :
- 데이터 분석을 위해서 데이터를 구하다 보면, raw데이터는 구하기 어렵고 이미 raw데이터를 가지고 분석한 결과 테이블을 구할 수 있는 경우가 있음.
- 공공 데이터 포털에 올려진 데이터를 보면 주로 이미 pivoting된 결과 데이터를 구할 수 있는 경우가 많음. 내가 원하는 데이터는 pivoting 전 raw데이터.
-> UNPIVOT을 통해 원하는 형태로 만들어주고, 테이블로 생성하면 됨.
구조:
SELECT *
FROM 대상 테이블
UNPIVOT ( 컬럼별칭(값) FOR 컬럼별칭(열) IN (테이블 열명 나열)
컬럼별칭부분은 한글로 임의로 지정해줘도 됨.
IN 다음 괄호 안에 컬럼명 양쪽에 '' 쓰지 않음.
1. UNPIVOT문을 위한 테이블 준비
DROP TABLE order2;
CREATE TABLE order2
(ename VARCHAR2(10),
bicycle NUMBER(10),
camera NUMBER(10),
notebook NUMBER(10) );
INSERT INTO order2 VALUES ('SMITH', 2, 3, 1);
INSERT INTO order2 VALUES ('ALLEN', 1, 2, 3);
INSERT INTO order2 VALUES ('KING', 3, 2, 2);
COMMIT;
SELECT * FROM order2;
2. UNPIVOT 작업
SELECT *
FROM order2
UNPIVOT ( 갯수 for 아이템 in (bicycle, camera, notebook));
3. UNPIVOT한 테이블 생성
DROP TABLE item2
CREATE TABLE item2
AS
SELECT *
FROM order2
UNPIVOT(갯수 FOR 아이템 IN (bicycle, camera, notebook));
COMMIT;
SELECT * FROM item2;
4. 원하는 SQL 문 작성
문제 248. item2에서 아이템, 아이템별 갯수2의 토탈값을 출력하시오.
SELECT 아이템, SUM(갯수)
FROM item2
GROUP BY 아이템;
'Oracle DBA > SQL' 카테고리의 다른 글
20230629 (2) SQL 051 : 데이터 분석 함수로 비율 출력하기(RATIO_TO_REPORT) (0) | 2023.06.29 |
---|---|
20230629 (1) SQL 050 : 데이터 분석 함수로 누적 데이터 출력하기(SUM OVER) (0) | 2023.06.29 |
20230628 (6) SQL 048 ROW 를 COLUMN 으로 출력하기 2(PIVOT) (0) | 2023.06.28 |
20230628 (5) SQL 047 : ROW를 COLUMN으로 출력하기 1(SUM+DECODE) (0) | 2023.06.28 |
20230627 (4) SQL 046 : 데이터 분석 함수로 바로 전 행과 다음 행 출력하기(LAG, LEAD) (0) | 2023.06.28 |