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

MySQL SUM() 함수에 값이 없는 열을 전달하면 어떻게 될까?

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()로 감싸 원하는 기본값을 지정할 수 있습니다.