Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 열 값을 합산할 때 조건 설정하는 방법 – IF() 함수 활용법

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와 같이 작성해도 동일한 결과를 얻을 수 있습니다.