MySQL의 SUM() 함수에 값이 하나도 저장되어 있지 않은 열(컬럼)을 인수로 전달하면, 0이 아니라 NULL을 반환합니다. 이 동작은 열의 데이터 타입과 무관하게 동일하게 적용됩니다.
아래 예시에서는 값이 전혀 들어 있지 않은 'id'와 'name' 두 개의 열만 가진 'social' 테이블을 사용해 이를 직접 확인해 보겠습니다.
예시
mysql> Describe Social; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | Id | int(11) | YES | | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> Select * from Social; Empty set (0.00 sec) mysql> Select SUM(id) from Social; +---------+ | SUM(id) | +---------+ | NULL | +---------+ 1 row in set (0.00 sec) mysql> Select SUM(Name) from Social; +-----------+ | SUM(Name) | +-----------+ | NULL | +-----------+ 1 row in set (0.00 sec)
실행 결과를 보면, 숫자 타입인 id 열뿐만 아니라 문자열 타입인 name 열에 대해 SUM() 함수를 사용했을 때도 모두 NULL이 반환되는 것을 확인할 수 있습니다.
NULL 대신 0을 반환받고 싶다면?
집계 결과가 없을 때 NULL 대신 0을 표시하고 싶다면 COALESCE() 또는 IFNULL() 함수를 함께 사용하면 됩니다.
mysql> Select COALESCE(SUM(id), 0) from Social; +----------------------+ | COALESCE(SUM(id), 0) | +----------------------+ | 0 | +----------------------+ 1 row in set (0.00 sec)
이처럼 값이 없는 열에 대한 SUM() 함수의 기본 반환값은 NULL이지만, 상황에 따라 COALESCE()나 IFNULL()로 감싸 원하는 기본값을 지정할 수 있습니다.