MySQL의 SUM() 함수는 집계 대상 컬럼에 값이 하나도 없을 경우 0이 아닌 NULL을 반환합니다. 하지만 결과 화면에 0으로 표시하고 싶다면 COALESCE() 함수를 함께 사용하면 됩니다. COALESCE() 함수는 두 개의 인자를 받으며, 첫 번째 인자가 NULL이면 두 번째 인자를 반환하고, NULL이 아니라면 첫 번째 인자를 그대로 반환하는 방식으로 동작합니다.
예제 데이터 살펴보기
이해를 돕기 위해 다음과 같은 데이터를 가진 'Tender' 테이블을 예로 들어 보겠습니다.
mysql> Select * from tender; +----+---------------+--------------+ | Sr | CompanyName | Tender_value | +----+---------------+--------------+ | 1 | Abc Corp. | 250.369003 | | 2 | Khaitan Corp. | 265.588989 | | 3 | Singla group. | 220.255997 | | 4 | Hero group. | 221.253006 | | 5 | Honda group | NULL | +----+---------------+--------------+ 5 rows in set (0.00 sec)
SUM() 함수 단독 사용 시 NULL 반환
'Honda Group'이 제시한 입찰 금액의 총합을 구하려고 하면, 해당 회사의 Tender_value 컬럼에 값이 없기 때문에 SUM() 함수는 NULL을 반환합니다.
mysql> Select SUM(Tender_value) From Tender Where CompanyName = 'Honda Group'; +-------------------+ | SUM(Tender_value) | +-------------------+ | NULL| +-------------------+ 1 row in set (0.00 sec)
COALESCE() 함수로 NULL을 0으로 변경하기
만약 이러한 NULL 출력을 0으로 바꾸고 싶다면, COALESCE() 함수를 SUM() 함수와 함께 사용하면 됩니다. 아래 예시에서 'Honda Group'의 총 입찰 금액이 0으로 표시되는 것을 확인할 수 있습니다.
mysql> Select COALESCE(SUM(Tender_value),0) From Tender Where CompanyName = 'Honda Group'; +-------------------------------+ | COALESCE(SUM(Tender_value),0) | +-------------------------------+ | 0.000000| +-------------------------------+ 1 row in set (0.00 sec)
존재하지 않는 데이터에 대한 적용 예시
COALESCE()와 SUM()을 함께 사용하면 테이블에 존재하지 않는 이름을 조건으로 조회할 때도 유용합니다. 아래 예시에서는 employee_tbl 테이블에 없는 'Mohan'이라는 이름으로 입력된 페이지 수의 합계를 구했으며, 결과가 0으로 반환됩니다.
mysql> SELECT COALESCE(SUM(daily_typing_pages),0) FROM employee_tbl WHERE Name = 'Mohan'; +-------------------------+ | SUM(daily_typing_pages) | +-------------------------+ | 0 | +-------------------------+ 1 row in set (0.00 sec)
정리
위의 결과들을 통해 알 수 있듯이, MySQL의 SUM() 함수는 컬럼에 값이 전혀 없으면 데이터 타입과 관계없이 항상 NULL을 반환합니다. 따라서 NULL 대신 0 또는 다른 기본값을 출력하고 싶다면 COALESCE() 함수를 활용하는 것이 가장 간단하고 효과적인 방법입니다.