DB/SQL

[세무민의 코딩일기] mysql에서 피벗 구현하기!

세기루민 2021. 8. 2. 22:15
728x90

오늘 포스팅은 pivot에 관련된 내용을 다뤄볼 생각입니다. 

pivot을 이용하는 건 예전에 오라클에서 달력 만들었던 포스팅에서도 다뤘습니다.

https://sg-moomin.tistory.com/entry/Oracle-DB%EB%A1%9C-%EB%8B%AC%EB%A0%A5-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

Oracle DB로 달력 만들기!

오늘 과장님께서 주신 과제가 있어서 과제를 푸는데 과제 내용은 쿼리로 달력을 만드는것! 그래서 내가 구현한 방법은 총 3가지였다! #1 Case 문을 이용하는 방법! select min(case when WEEKDAY = 1 then DDAY

sg-moomin.tistory.com

해당 포스팅은 위에 링크를 따라가면 확인할 수 있습니다.

오라클에서는 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이 자주 사용된다는 것도 알 수 있었습니다.

그만큼 중요하고 자주 사용되는 것이기 때문에 한번쯤 알아두는 걸 추천드립니다! 

다음에는 더 유익한 포스팅으로 찾아오겠습니다.

 

728x90