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

MySQL SUM() 함수에서 일치하는 행이 없을 때 NULL 대신 0을 반환하는 방법

MySQL SUM() 함수의 NULL 반환 문제

MySQL의 SUM() 함수는 조건에 일치하는 행이 하나도 없을 경우 NULL을 반환합니다. 하지만 실무에서는 NULL 대신 0이 반환되기를 원하는 경우가 많습니다. 예를 들어, 집계 결과를 화면에 표시하거나 다른 계산에 활용할 때 NULL 값은 오류나 혼란을 일으킬 수 있기 때문입니다.

이러한 문제를 해결하기 위해 MySQL에서는 COALESCE() 함수를 사용할 수 있습니다. COALESCE() 함수는 두 개의 인수를 받으며, 첫 번째 인수가 NULL이면 두 번째 인수를 반환하고, 그렇지 않으면 첫 번째 인수를 그대로 반환합니다.

예제 테이블 살펴보기

개념을 이해하기 위해 다음과 같은 레코드를 가진 'employee_tbl' 테이블을 살펴보겠습니다.

mysql> SELECT * FROM employee_tbl;
+------+------+------------+--------------------+
| id   | name | work_date  | daily_typing_pages |
+------+------+------------+--------------------+
| 1    | John | 2007-01-24 |         250        |
| 2    | Ram  | 2007-05-27 |         220        |
| 3    | Jack | 2007-05-06 |         170        |
| 3    | Jack | 2007-04-06 |         100        |
| 4    | Jill | 2007-04-06 |         220        |
| 5    | Zara | 2007-06-06 |         300        |
| 5    | Zara | 2007-02-06 |         350        |
+------+------+------------+--------------------+
7 rows in set (0.00 sec)

COALESCE()와 SUM() 함께 사용하기

이제 COALESCE() 함수와 SUM() 함수를 함께 사용하여 'Mohan'이라는 직원(테이블의 Name 열에 존재하지 않는 이름)이 입력한 총 페이지 수를 조회해 보겠습니다. 일치하는 행이 없으므로 SUM()은 원래 NULL을 반환하지만, COALESCE() 덕분에 0이 반환됩니다.

mysql> SELECT COALESCE(SUM(daily_typing_pages),0) AS 'SUM(daily_typing_pages)' 
FROM employee_tbl WHERE Name = 'Mohan';
+-------------------------+
| SUM(daily_typing_pages) |
+-------------------------+
|            0            |
+-------------------------+
1 row in set (0.00 sec)

정리

위 예제에서 확인할 수 있듯이, WHERE 절의 조건과 일치하는 행이 전혀 없는 상황에서도 COALESCE(SUM(...), 0) 패턴을 사용하면 결과가 항상 숫자 값으로 반환됩니다. 이 방식은 리포트 작성, 대시보드 집계, 애플리케이션 데이터 처리 시 NULL 처리 로직을 단순화하는 데 매우 유용합니다. 참고로 IFNULL(SUM(...), 0) 함수를 사용해도 동일한 결과를 얻을 수 있습니다.