MySQL SUM 함수가 NULL 대신 0을 반환하도록 만드는 방법
MySQL에서 SUM() 함수는 집계할 데이터가 전혀 없거나 모든 값이 NULL일 경우 0이 아닌 NULL을 반환합니다. 이런 경우 애플리케이션에서 예기치 않은 오류나 빈 화면이 발생할 수 있습니다. 조회된 값이 없을 때에도 합계를 반드시 '0'으로 받고 싶다면 IFNULL() 또는 COALESCE() 함수를 사용하면 됩니다.
방법 1: IFNULL() 함수 사용하기
IFNULL()은 첫 번째 인수가 NULL일 경우 두 번째 인수로 지정한 기본값을 대신 반환하는 MySQL 전용 함수입니다. 아래는 기본 문법입니다.
SELECT IFNULL(SUM(컬럼명), 0) AS aliasName;
실제로 위 문법을 쿼리에 적용해 보겠습니다.
mysql> SELECT IFNULL(SUM(NULL), 0) AS SUMOFTWO;
위 쿼리의 실행 결과는 다음과 같으며, NULL이 아닌 0이 정상적으로 반환됩니다.
+----------+ | SUMOFTWO | +----------+ | 0 | +----------+ 1 row in set (0.00 sec)
방법 2: COALESCE() 함수 사용하기
COALESCE()는 표준 SQL 함수로, 인수 목록 중에서 NULL이 아닌 첫 번째 값을 반환합니다. 따라서 SUM의 결과가 NULL일 경우 그다음 인수인 0이 반환되는 원리입니다.
mysql> SELECT COALESCE(SUM(NULL), 0) AS SUMOFTWO;
실행 결과 역시 동일하게 0이 출력됩니다.
+----------+ | SUMOFTWO | +----------+ | 0 | +----------+ 1 row in set (0.00 sec)
실무 활용 예제
실제 업무에서는 특정 조건에 맞는 주문 금액의 총합을 구할 때 유용하게 사용할 수 있습니다. 해당 날짜에 주문이 하나도 없어도 결과가 0으로 나오므로 안전하게 처리할 수 있습니다.
SELECT IFNULL(SUM(price), 0) AS total_price FROM orders WHERE order_date = '2024-01-01';
정리
SUM()은 집계 대상이 없으면 NULL을 반환합니다.IFNULL(SUM(...), 0)— MySQL 전용 간단한 방법COALESCE(SUM(...), 0)— 표준 SQL 방식으로 다른 DBMS에서도 호환 가능
두 함수 모두 결과는 같으므로, 프로젝트의 DBMS 호환성을 고려해 선택하시면 됩니다.