MySQL에서 여러 열의 값을 더할 때 특정 조건을 적용하고 싶다면 IF() 함수를 활용하면 됩니다. 예를 들어, 음수 값은 합산에서 제외하고 양수 값만 더하는 식의 처리가 가능합니다.
1. 샘플 테이블 생성하기
먼저 실습에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int,
-> Value3 int
-> );
Query OK, 0 rows affected (0.64 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다. 일부러 음수 값도 포함시켰습니다.
mysql> insert into DemoTable values(10,20,-30);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values(50,60,90);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(100,200,400);
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values(30,40,-50);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(70,80,-1);
Query OK, 1 row affected (0.24 sec)
3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable;
실행 결과는 다음과 같습니다.
+--------+--------+--------+
| Value1 | Value2 | Value3 |
+--------+--------+--------+
| 10 | 20 | -30 |
| 50 | 60 | 90 |
| 100 | 200 | 400 |
| 30 | 40 | -50 |
| 70 | 80 | -1 |
+--------+--------+--------+
5 rows in set (0.00 sec)
4. IF() 함수로 조건부 합산 쿼리 작성하기
이제 열 값을 더하면서 조건을 설정하는 핵심 쿼리를 살펴보겠습니다. 아래 쿼리는 Value3가 0보다 클 때만 해당 값을 합산에 포함하고, 그렇지 않으면 0을 더합니다.
mysql> select Value1+Value2+if(Value3 > 0,Value3,0) from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------------------------+
| Value1+Value2+if(Value3 > 0,Value3,0) |
+---------------------------------------+
| 30 |
| 200 |
| 700 |
| 70 |
| 150 |
+---------------------------------------+
5 rows in set (0.00 sec)
결과 분석
IF(조건, 참일 때 값, 거짓일 때 값) 형식으로 동작하기 때문에 결과를 이해하기 쉽습니다.
- 첫 번째 행: 10 + 20 + if(-30 > 0, -30, 0) → -30은 조건을 만족하지 않으므로 0을 더해 30
- 두 번째 행: 50 + 60 + if(90 > 0, 90, 0) → 90은 조건을 만족하므로 그대로 더해 200
- 세 번째 행: 100 + 200 + 400 = 700
- 네 번째 행: 30 + 40 + 0 = 70 (-50 제외)
- 다섯 번째 행: 70 + 80 + 0 = 150 (-1 제외)
이처럼 IF() 함수를 사용하면 단순한 SUM 연산만으로는 불가능한 조건부 집계를 손쉽게 구현할 수 있습니다. CASE WHEN 구문을 선호한다면 CASE WHEN Value3 > 0 THEN Value3 ELSE 0 END와 같이 작성해도 동일한 결과를 얻을 수 있습니다.