728x90
320x100
아래 TEST 테이블의 테이터를
VERTICAL(종/세로) 에서
HORIZONTAL(횡/가로) 로
변환해 보려고 한다.
BEFORE : TEST (VERTICAL), 세로 데이터
TEST | ||
NAME | CLASS | SCORE |
AAA | KOR | 100 |
AAA | ENG | 100 |
AAA | CHN | 50 |
BBB | KOR | 90 |
BBB | ENG | 70 |
BBB | CHN | 30 |
CCC | KOR | 80 |
CCC | ENG | 80 |
CCC | CHN | 40 |
AFTER : TEST (HORIZONTAL), 가로 데이터
TEST | |||
NAME | KOR | ENG | CHN |
AAA | 100 | 100 | 50 |
BBB | 90 | 70 | 30 |
CCC | 80 | 80 | 40 |
①
먼저 CASE WHEN 을 사용하여 데이터의 정렬을 가로화 해보자.
SELECT NAME,
CASE WHEN CLASS = 'KOR' THEN SCORE END AS KOR,
CASE WHEN CLASS = 'ENG' THEN SCORE END AS ENG,
CASE WHEN CLASS = 'CHN' THEN SCORE END AS CHN
FROM TEST;
[실행결과]
TEST NAME KOR ENG CHN AAA 100 NULL NULL AAA NULL 100 NULL AAA NULL NULL 50 BBB 90 NULL NULL BBB NULL 70 NULL BBB NULL NULL 30 CCC 80 NULL NULL CCC NULL 80 NULL CCC NULL NULL 40
②
이제 NAME별 GROUP화 시킨후, MAX()를 사용하여 TEST (HORIZONTAL)를 쉽게 구할 수 있다.
SELECT NAME,
MAX( CASE WHEN CLASS = 'KOR' THEN SCORE END ) AS KOR,
MAX( CASE WHEN CLASS = 'ENG' THEN SCORE END ) AS ENG,
MAX( CASE WHEN CLASS = 'CHN' THEN SCORE END ) AS CHN
FROM TEST
GROUP BY NAME;
[실행결과]
TEST NAME KOR ENG CHN AAA 100 100 50 BBB 90 70 30 CCC 80 80 40
※ 참고 자료.
CASE WHEN 을 사용하여 조건에 맞는 결과값을 나타내보자.
MAX vs MIN (최대 vs 최소) 함수를 알아보자
728x90
반응형
'MariaDB SQL' 카테고리의 다른 글
MariaDB에서 NVL()을 사용하려면? (0) | 2023.03.30 |
---|---|
INSERT 한번에 여러개를 해보자. (0) | 2023.03.21 |
MAX vs MIN (최대 vs 최소) 함수를 알아보자 (0) | 2023.03.03 |
CASE WHEN 을 사용하여 조건에 맞는 결과값을 나타내보자. (0) | 2023.03.02 |
GROUP_CONCAT ()으로 여러 행의 문자열을 합칠 수 있다. (0) | 2023.02.28 |