티스토리 뷰

SQL

[SQL] 21. Unpivot

superkong1 2018. 2. 20. 23:06
반응형

21. Unpivot

요즘 하둡(hadoop)을 공부하며 사용해보고 있다. 조만간 블로그에도 올리겠지만
공부하면 할수록 데이터 분석가는 SQL의 기초를 탄탄히 다져야 한다는 생각이 든다.

하둡 생태계중에서 hive, Tajo 등 SQL을 기반으로 하는 것들이 많고,
NoSQL 중 하나인 Pig도 어렵지 않게 사용할 수 있다.



다시 본론으로 돌아와서, 오늘은 Excel에서도 흔히 쓰이면서 SQL의 유용한 장점이자
pivot 함수의 반대인 unpivot을 정리하자.

pivot이 세로 데이터 → 가로 컬럼명으로 이동하는 느낌이라면, unpivot은 가로 컬럼명 → 세로 데이터로 이동하는 느낌이다.
→ pivot에 대한 설명 다시 보기 <링크>

unpivot의 사용 방법은
unpivot ( 새로운컬럼명 for 지금 컬럼명이 데이터로 들어갈 컬럼명 in ( 컬럼명 입력 ) ) ; 이다.


쉬운 이해를 위해 예제로 사용할 table을 만들어보자.

ⓐ 구매 관련 데이터가 들어가는 buy 테이블을 만든다.
create table buy
( ename varchar2(10),
bicycle number(10),
camera number(10),
notebook number(10) );

ⓑ '철수', '영희', '민석'이의 구매 데이터를 insert한다.
insert into buy values('철수',2,3,1);
insert into buy values('영희',1,2,3);
insert into buy values('민석',3,2,2);

select * from buy;

ⓒ buy 테이블의 컬럼인 BICYCLE, CAMERA, NOTEBOOK이 데이터로 들어가는 buy2 테이블을 unpivot을 통해 만든다.
create table buy2
as
select *
from buy
unpivot( cnt for item in (BICYCLE, CAMERA, NOTEBOOK) );

select * from buy2;

본인도 공부를 하면서 알게 되었는데 pivot/unpivot의 개념은 R의 reshape 패키지의 melt, cast 함수로 이어진다.
특히 ADSP(데이터분석 준전문가)를 공부하시는 분들이라면 직접 사용해보시길 권장한다.

▼참고 그림

혹은 R의 패키지인 sqldf를 통해 R에서 sql 명령어를 사용하여 처리해도 된다.

사실상 SQL에서 unpivot을 사용하는 것도 중요하지만,
R, Python에서의 데이터 정제를 위한 개념정리를 위해서, 그리고 Hadoop,hive 등에서 대용량 데이터를 다룰 때 효율적인 분석을 위해서
pivot/unpivot은 필히 제대로 알고 넘어가야한다.


=================이 글은 Markdown을 활용해 작성하였습니다=================

반응형

'SQL' 카테고리의 다른 글

[SQL] 23. range(rows) between .. and ..  (3) 2018.03.15
[SQL] 22. Data Set의 Sample 확인 방법  (0) 2018.02.28
[SQL] 20. With절, 임시 테이블  (3) 2018.02.19
[SQL] 19. 제약(Constraint)  (0) 2018.02.17
[SQL] 18. 정규식 함수  (0) 2018.02.14
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함