오늘 포스팅은 pivot에 관련된 내용을 다뤄볼 생각입니다.
pivot을 이용하는 건 예전에 오라클에서 달력 만들었던 포스팅에서도 다뤘습니다.
해당 포스팅은 위에 링크를 따라가면 확인할 수 있습니다.
오라클에서는 decode, pivot, case when을 이용하여 열로 변환이 가능합니다.
그렇지만 mysql에서는 pivot을 만들 때 case when이나 if를 이용하여 만드는 것이 일반적입니다.
# mysql에서 pivot 사용하기
select sum(case when airlinename = '대한항공' then 1 else 0 end) as '대한항공 합계',
sum(case when airlinename = '아시아나항공' then 1 else 0 end) as '아시아나항공 합계',
sum(case when airlinename = '에어부산' then 1 else 0 end) as '에어부산 합계',
sum(case when airlinename = '진에어' then 1 else 0 end) as '진에어 합계',
sum(case when airlinename = '제주항공' then 1 else 0 end) as '제주항공 합계',
sum(case when airlinename = '티웨이' then 1 else 0 end) as '티웨이 합계',
sum(1) as '합계'
from airplane;
위의 코드를 보면 우선 airlinename에 따라 합계를 구하는 코드입니다.
해당 합계를 case when을 이용하여 열에 하나씩 추가해줬고 해당 코드를 돌리면
위와 같이 pivot을 구현할 수 있습니다.
즉 pivot을 구현할 때는 case when을 이용하는 것이 일반적입니다.
추가적으로 null값이 아닌 값을 반환해주는 COALESCE를 이용하여 case when을 사용하는 것도 동일합니다.
select price,
COALESCE(SUM(CASE WHEN seatclass='비즈니스' THEN 1 END), 0) as '비즈니스 합계',
COALESCE(SUM(CASE WHEN seatclass='이코노미' THEN 1 END), 0) as '이코노미 합계',
COALESCE(SUM(CASE WHEN seatclass='퍼스트' THEN 1 END), 0) as '퍼스트 합계'
from seat
group by seatclass;
위의 코드를 돌리게 되면
위에 그림처럼 pivot을 구현하여 합계들이 열로 표현되는 것을 확인할 수 있습니다.
이번 포스팅에서는 pivot에 대해서 알아봤습니다.
사실 pivot을 포스팅 한 이유는 그만큼 중요하고 빈번하기 때문에 포스팅했습니다.
저도 pivot에 대해서 간략하게만 알았지만 실제 일을 하면서 오라클 DB로 pivot을 이용해야 하는 경우가 종종
필요했고 이에 따라서 pivot이 자주 사용된다는 것도 알 수 있었습니다.
그만큼 중요하고 자주 사용되는 것이기 때문에 한번쯤 알아두는 걸 추천드립니다!
다음에는 더 유익한 포스팅으로 찾아오겠습니다.
'DB > SQL' 카테고리의 다른 글
[세무민의 코딩일기] mysql로 Union 사용하기 (0) | 2021.12.21 |
---|---|
[세무민의 코딩일기] mysql에서 json 이용하기 (0) | 2021.08.23 |
[세무민의 코딩일기] 쿼리에서 자주 사용하는 MOD, POW 등 숫자 함수에 대해서 알아보기 (0) | 2021.07.29 |
[세무민의 코딩일기] SQL 내장함수에 대해서 알아보자 2탄!(문자열 공백 제거와 문자열 쪼개기) (0) | 2021.07.28 |
[세무민의 코딩일기] SQL 내장함수에 대해서 알아보자 1탄!(길이, 진법변환, 문자열 반환 등) (0) | 2021.07.27 |