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

MySQL에서 빈 테이블의 MAX(rank) 조회 시 NULL 대신 0을 반환하는 방법

빈 테이블에서 MAX() 함수의 NULL 결과를 피하는 방법

MySQL에서 테이블이 비어 있거나 컬럼 값이 모두 NULL일 때 MAX() 같은 집계 함수를 사용하면 결과로 NULL이 반환됩니다. 이러한 NULL 결과를 원하지 않는 값(예: 0)으로 대체하려면 COALESCE() 함수를 집계 함수와 함께 사용하면 됩니다.

COALESCE()는 인자로 전달된 값들 중 첫 번째로 NULL이 아닌 값을 반환하는 함수입니다. 따라서 MAX()의 결과가 NULL이면 그 다음 인자인 기본값이 대신 반환됩니다.

기본 문법

SELECT COALESCE(MAX(`yourColumnName`), 0) FROM yourTableName;

위 문법을 실제로 이해하기 위해 예제 테이블을 만들어 보겠습니다.

1. 테이블 생성

mysql> create table avoidNullDemo
-> (
-> `rank` int
-> );
Query OK, 0 rows affected (0.53 sec)

2. 데이터 삽입

INSERT 명령을 사용해 일부 레코드를 삽입합니다. 일부러 NULL 값도 함께 넣었습니다.

mysql> insert into avoidNullDemo values(10);
Query OK, 1 row affected (0.20 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.18 sec)
mysql> insert into avoidNullDemo values(20);
Query OK, 1 row affected (0.17 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into avoidNullDemo values(NULL);
Query OK, 1 row affected (0.16 sec)

3. 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from avoidNullDemo;

NULL 값이 포함된 출력 결과는 다음과 같습니다.

+------+
| rank |
+------+
| 10 |
| NULL |
| 20 |
| NULL |
| 100 |
| NULL |
+------+
6 rows in set (0.00 sec)

4. COALESCE()를 사용한 NULL 방지 쿼리

이제 COALESCE()를 적용하여 NULL 결과를 피하는 쿼리를 실행해 보겠습니다.

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

출력 결과는 다음과 같습니다. 최대값인 100이 정상적으로 반환됩니다.

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 100 |
+--------------------------+
1 row in set (0.00 sec)

5. 빈 테이블에서의 동작 확인

이번에는 테이블이 완전히 비어 있는 경우를 살펴보겠습니다. TRUNCATE 명령으로 테이블의 모든 레코드를 삭제합니다.

mysql> truncate table avoidNullDemo;
Query OK, 0 rows affected (0.92 sec)

이제 테이블이 비어 있습니다. 앞서 작성한 동일한 쿼리를 빈 테이블에 실행해 보겠습니다.

mysql> select COALESCE(MAX(`rank`), 0) FROM avoidNullDemo;

출력 결과는 다음과 같습니다. 테이블이 비어 있어도 NULL이 아닌 0이 반환되는 것을 확인할 수 있습니다.

+--------------------------+
| COALESCE(MAX(`rank`), 0) |
+--------------------------+
| 0 |
+--------------------------+
1 row in set (0.00 sec)

정리

빈 테이블에 대해 MAX() 같은 집계 함수를 사용하면 MySQL은 기본적으로 NULL을 반환합니다. 이때 COALESCE(MAX(컬럼명), 0) 형태로 작성하면 결과가 NULL일 경우 지정한 기본값(여기서는 0)으로 대체됩니다. IFNULL() 함수를 사용해도 동일한 효과를 얻을 수 있으며, 이 방식은 통계 조회나 리포트 작성 시 NULL 처리를 간편하게 해주는 유용한 패턴입니다.