본문 바로가기
Programming/SQL

[MySQL] 행과 열 바꾸기 (Transpose)

by 코딩하는 금융인 2022. 11. 12.

안녕하세요.

오늘은 MySQL에서 행과 열 데이터를 바꾸어보는 방법에 대해서 알아보겠습니다.

 

 

 행과 열 단순 바꾸기 (Transpose)

▣ Transpose 행과 열 바꾸기

- Excel에는 행과 열을 바꿔서 출력하는 Transpose 함수가 있는데 안타깝게도 SQL에는 그러한 기능을 가진 함수가 없습니다. 이번 시간에는 Transpose 역할을 하는 쿼리를 한 번 짜보겠습니다.

 

: 예시 데이터 준비

--Data 생성하기
CREATE TABLE Example
    (`name` varchar(4), `height` int, `score` int, `groups` varchar(1))
;
    
INSERT INTO Example
    (`name`, `height`, `score`, `groups`)
VALUES
    ('john', 174, 87, 'A'),
    ('bs', 167, 50, 'B'),
    ('sh', 179, 73, 'C'),
    ('jk', 177, 63, 'A'),
    ('ja', 193, 99, 'A'),
    ('ta', 173, 84, 'B'),
    ('ts', 171, 77, 'C')
;

-- Group By
Select groups, sum(score) from Example
group by groups;

- Example 데이터에는 학생들의 이름, 키, 점수 그리고 속한 반이 들어가 있습니다. 위에 출력한 자료는 학생들이 속한 반(groups)별로 점수 합계를 나타낸 것입니다.

 

- sum(case when ~) 구절을 통해 해당 출력물의 행과 열을 Transpose해보겠습니다.

 

: 결과물

SELECT 
sum(case when groups='A' then score end) as 'A', 
sum(case when groups='B' then score end) as 'B', 
sum(case when groups='C' then score end) as 'C' 

FROM Example;

- SQL의 열은 Select를 통해서 지정할 수 있습니다. Select에서 열을 지정한 후, case when 절을 통해서 집계된 데이터의 행과 열을 반전시킬 수 있습니다.

 

- 또한, 위의 예시처럼 한 행과 한 열을 반전시키는 것이 아니라 다른 열들을 포함하여 반전시킬 때는 case when와 group by를 함께 잘 붙여서 사용하는 Null 값 없이 잘 출력됩니다.

반응형

댓글