MySQL에서 여러 열의 값을 기반으로 조건을 설정하려면 CASE WHEN 문을 사용하면 됩니다. 이 문법은 특정 조건에 따라 다른 결과값을 반환하므로, 0 또는 1처럼 이진 형태의 데이터를 평가할 때 매우 유용합니다.
예제 테이블 생성
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int,
-> Value3 int,
-> Value4 int
-> );
Query OK, 0 rows affected (0.98 sec)
데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable values(1,0,1,1);
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable values(1,0,1,0);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(1,1,1,1);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(0,0,0,0);
Query OK, 1 row affected (0.15 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+--------+--------+--------+
| Value1 | Value2 | Value3 | Value4 |
+--------+--------+--------+--------+
| 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 |
| 0 | 0 | 0 | 0 |
+--------+--------+--------+--------+
4 rows in set (0.00 sec)
CASE WHEN으로 조건 설정하기
이제 네 개 열(Value1~Value4)의 합계를 계산하여, 그 값이 2보다 작으면 'NotGood', 그렇지 않으면 'Good'을 반환하는 조건 쿼리를 작성해 보겠습니다.
mysql> select case when Value1+Value2+Value3+Value4 < 2 then 'NotGood' else 'Good' end as Status from DemoTable;
실행 결과는 다음과 같습니다.
+---------+
| Status |
+---------+
| Good |
| Good |
| Good |
| NotGood |
+---------+
4 rows in set (0.00 sec)
쿼리 동작 원리
위 쿼리는 각 행마다 네 열의 값을 더한 후, 그 합계가 2 미만인지 판단합니다. 예를 들어 마지막 행은 모든 값이 0이므로 합계가 0이 되어 'NotGood'이 반환되고, 나머지 행들은 합계가 2 이상이므로 'Good'이 출력됩니다.
이처럼 CASE WHEN 문은 단순 비교부터 복잡한 다중 조건 처리까지 폭넓게 활용할 수 있으며, 불리언(0/1) 형태의 플래그 열을 집계하거나 상태를 분류하는 데 특히 효과적입니다.