MySQL에서 NULL을 0으로 처리하여 두 열의 값 더하기
MySQL에서 두 열의 값을 단순히 더하면 한쪽 열에 NULL이 있을 경우 결과 역시 NULL이 되어버립니다. 이러한 문제를 해결하려면 COALESCE() 함수를 사용하면 됩니다. COALESCE()는 전달된 인수 중 첫 번째로 NULL이 아닌 값을 반환하는 함수로, 이를 활용하면 NULL을 0으로 대체하여 정상적인 합계를 계산할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.51 sec)
insert 명령을 사용해 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values(100,200);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values(NULL,90);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(NULL,NULL);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(600,NULL);
Query OK, 1 row affected (0.12 sec)
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 100 | 200 |
| NULL | 90 |
| NULL | NULL |
| 600 | NULL |
+--------+--------+
4 rows in set (0.00 sec)
NULL을 0으로 취급하면서 두 열의 값을 더하는 쿼리는 다음과 같습니다.
mysql> SELECT COALESCE(Value1, 0) + COALESCE(Value2, 0) AS Sum from DemoTable;
출력 결과
+------+
| Sum |
+------+
| 300 |
| 90 |
| 0 |
| 600 |
+------+
4 rows in set (0.00 sec)
실행 결과를 보면 NULL 값이 모두 0으로 처리되어 올바른 합계가 계산된 것을 확인할 수 있습니다. 즉, (100, 200)은 300, (NULL, 90)은 90, (NULL, NULL)은 0, (600, NULL)은 600으로 정상적으로 출력됩니다.
참고로 IFNULL() 함수를 사용해도 동일한 결과를 얻을 수 있습니다. IFNULL(Value1, 0) + IFNULL(Value2, 0) 형태로 작성하면 되며, 두 함수 모두 첫 번째 인수가 NULL일 때 지정한 대체값을 반환한다는 점에서 같은 방식으로 동작합니다.