MySQL

13. 피벗(Pivot)

newness 2022. 5. 3. 14:00

아래와 같은 테이블이 있다고 가정한다.

 

TABLE Name: football_heritage

id team trophy value etc
1 레알 마드리드 LEAGUE 25 20C
2 FC 바르셀로나 LEAGUE 14 20C
3 바이에른 뮌헨 LEAGUE 20 20C
4 유벤투스 LEAGUE 36 20C
5 리버풀 LEAGUE 18 20C
6 AC밀란 LEAGUE 14 20C
7 레알 마드리드 CHAMPIONS LEAGUE 13 -
8 FC 바르셀로나 CHAMPIONS LEAGUE 5 -
9 바이에른 뮌헨 CHAMPIONS LEAGUE 6 -
10 유벤투스 CHAMPIONS LEAGUE 2 -
11 리버풀 CHAMPIONS LEAGUE 6 -
12 AC밀란 CHAMPIONS LEAGUE 7 -
13 레알 마드리드 DOMAIN CUP 19 -
14 FC 바르셀로나 DOMAIN CUP 31 -
15 바이에른 뮌헨 DOMAIN CUP 20 -
16 유벤투스 DOMAIN CUP 14 -
17 리버풀 DOMAIN CUP 7 -
18 AC밀란 DOMAIN CUP 5 -
19 레알 마드리드 LEAGUE 10 21C
20 FC 바르셀로나 LEAGUE 12 21C
21 바이에른 뮌헨 LEAGUE 11 21C
22 리버풀 LEAGUE 1 21C
23 AC밀란 LEAGUE 4 21C

 

각 팀의 대회별 우승횟수를 조회하는 표를 출력하기 위해 피벗을 구현한 쿼리이다.

 

SUM(IF~)) 를 활용한 방법이다.

SELECT

FH.team,
  SUM(IF(FH.trophy = 'LEAGUE', FH.value, 0) AS 'LEAGUE',
  SUM(IF(FH.trophy = 'DOMAIN CUP', FH.value, 0) AS 'DOMAIN CUP',
  SUM(IF(FH.trophy = 'CHAMPIONS LEAGUE', FH.value, 0) AS 'CHAMPIONS LEAGUE',
  SUM(FH.value) AS 'ALL'

FROM football_heritage AS FH
GROUP BY FH.team

 

결과

team LEAGUE DOMAIN CUP CHAMPIONS LEAGUE
레알 마드리드 35 19 13
FC 바르셀로나 26 31 5
바이에른 뮌헨 31 20 6
유벤투스 36 14 2
리버풀 19 7 6
AC밀란 18 5 7