MySQL에서 조건에 따라 같은 열의 값을 다른 열로 나누어 표시하기
MySQL에서 하나의 열(Score)에 저장된 값들을 특정 조건에 따라 구분하여 각각 다른 열에 표시하려면 CASE 문을 활용하면 됩니다. CASE 문은 조건을 평가한 뒤, 조건이 참일 때만 해당 값을 반환하고 그렇지 않으면 NULL을 출력하기 때문에 이런 작업에 매우 유용합니다.
실제 예제를 통해 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 만듭니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name varchar(40),
Score int
);
Query OK, 0 rows affected (0.54 sec)2단계: 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(Name,Score) values('Chris',45);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(Name,Score) values('David',68);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('Robert',89);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',34);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Score) values('Sam',66);
Query OK, 1 row affected (0.22 sec)3단계: 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+--------+-------+ | Id | Name | Score | +----+--------+-------+ | 1 | Chris | 45 | | 2 | David | 68 | | 3 | Robert | 89 | | 4 | Bob | 34 | | 5 | Sam | 66 | +----+--------+-------+ 5 rows in set (0.00 sec)
4단계: CASE 문으로 조건별 열 분리
이제 같은 Score 열의 값을 세 가지 조건(40 미만, 60~70 사이, 80 초과)으로 나누어 별도의 열에 표시하는 쿼리입니다.
mysql> select Score,
case when Score < 40 then Score end as 'Score Less than 40',
case when Score between 60 and 70 then Score end as 'Score Between 60 and 70',
case when Score > 80 then Score end as 'Score greater than 80'
from DemoTable;위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------+--------------------+--------------------------+-----------------------+ | Score | Score Less than 40 | Score Between 60 and 70 | Score greater than 80 | +-------+--------------------+--------------------------+-----------------------+ | 45 | NULL | NULL | NULL | | 68 | NULL | 68 | NULL | | 89 | NULL | NULL | 89 | | 34 | 34 | NULL | NULL | | 66 | NULL | 66 | NULL | +-------+--------------------+--------------------------+-----------------------+ 5 rows in set, 1 warning (0.03 sec)
결과 해석
출력 결과를 보면 각 행의 Score 값이 자신에게 해당하는 조건 열에만 표시되고, 나머지 열에는 NULL이 들어간 것을 확인할 수 있습니다.
- 34점(Bob): 'Score Less than 40' 열에만 값이 표시됩니다.
- 68점(David)과 66점(Sam): 'Score Between 60 and 70' 열에만 값이 표시됩니다.
- 89점(Robert): 'Score greater than 80' 열에만 값이 표시됩니다.
- 45점(Chris): 어떤 조건에도 해당하지 않아 모든 조건 열이 NULL입니다.
이처럼 CASE 문은 WHEN 절의 조건이 거짓일 경우 ELSE 절이 없으면 자동으로 NULL을 반환합니다. 따라서 조건에 맞는 값만 원하는 열에 깔끔하게 배치할 수 있으며, ELSE 절을 추가하면 조건에 맞지 않는 경우의 기본값도 지정할 수 있습니다.