MySQL SUM() 함수와 NULL 값 처리 방식
MySQL에서 SUM() 함수를 사용해 특정 열의 합계를 계산할 때, 해당 열에 NULL 값이 포함되어 있다면 어떻게 될까요? 결론부터 말하면 MySQL의 SUM() 함수는 NULL 값을 자동으로 무시하고, 나머지 유효한 값들만 더해서 결과를 반환합니다.
예제 테이블: employee
아래와 같이 일부 직원의 급여(Salary)가 NULL로 저장된 'employee' 테이블을 예로 들어 살펴보겠습니다.
mysql> Select * from Employee;
+----+--------+--------+
| ID | Name | Salary |
+----+--------+--------+
| 1 | Gaurav | 50000 |
| 2 | Rahul | 20000 |
| 3 | Advik | 25000 |
| 4 | Aarav | 65000 |
| 5 | Ram | 20000 |
| 6 | Mohan | 30000 |
| 7 | Aryan | NULL |
| 8 | Vinay | NULL |
+----+--------+--------+
8 rows in set (0.00 sec)
SUM() 함수로 전체 급여 합계 구하기
위 테이블에서 직원들의 급여 총합을 구한다고 가정해 보겠습니다. Aryan과 Vinay의 급여 값은 NULL이지만, SUM() 함수는 이를 무시하고 나머지 여섯 명의 급여만 합산합니다.
mysql> Select SUM(Salary) from Employee;
+-------------+
| SUM(Salary) |
+-------------+
| 210000 |
+-------------+
1 row in set (0.00 sec)
결과는 210000입니다. 즉, 50000 + 20000 + 25000 + 65000 + 20000 + 30000 = 210000이며, NULL 값은 계산에 전혀 영향을 주지 않았습니다.
NULL 제외 조건으로 검증하기
이 동작은 WHERE 절을 사용해 명시적으로 NULL 값을 제외한 쿼리와 비교하면 확인할 수 있습니다.
mysql> Select SUM(Salary) from Employee WHERE Salary IS NOT NULL;
+-------------+
| SUM(Salary) |
+-------------+
| 210000 |
+-------------+
1 row in set (0.00 sec)
두 쿼리의 결과가 동일하게 210000으로 나타나는 것을 통해, SUM() 함수가 내부적으로 NULL 값을 자동으로 제외하고 집계한다는 사실을 알 수 있습니다.
정리
- MySQL의 SUM() 함수는 집계 대상 열에 NULL 값이 있어도 이를 무시하고 유효한 숫자 값만 합산합니다.
- 따라서 별도의 WHERE Salary IS NOT NULL 조건 없이도 정확한 합계를 얻을 수 있습니다.
- 단, 모든 행의 값이 NULL인 경우에는 SUM()의 결과가 0이 아니라 NULL로 반환된다는 점에 유의해야 합니다.