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

MySQL에서 NULL 값 개수 세는 방법 – CASE 문 활용 가이드

MySQL에서 NULL 값의 개수를 확인하려면 CASE 문을 활용하면 됩니다. COUNT 함수는 기본적으로 NULL을 제외하고 집계하기 때문에, NULL만 별도로 세고 싶다면 조건부 로직이 필요합니다. 이번 글에서는 예제 테이블을 직접 만들고, 단계별로 NULL 값을 집계하는 방법을 알아보겠습니다.

1. 예제 테이블 생성하기

먼저 데모용 테이블을 생성합니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    FirstName varchar(20)
);
Query OK, 0 rows affected (0.77 sec)

2. 데이터 삽입하기

INSERT 명령어로 레코드를 추가합니다. 일반 문자열뿐 아니라 NULL빈 문자열('')도 함께 넣어 두 값의 차이를 나중에 확인할 수 있도록 했습니다.

mysql> insert into DemoTable(FirstName) values('John');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(FirstName) values(null);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable(FirstName) values('');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(FirstName) values('Larry');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(FirstName) values('');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(FirstName) values(null);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(FirstName) values(null);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(FirstName) values('Bob');
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 조회하기

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

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-----------+
| Id | FirstName |
+----+-----------+
| 1  | John      |
| 2  | NULL      |
| 3  |           |
| 4  | Larry     |
| 5  |           |
| 6  | NULL      |
| 7  | NULL      |
| 8  | Bob       |
+----+-----------+
8 rows in set (0.00 sec)

위 결과에서 Id가 2, 6, 7인 행은 FirstName이 NULL이고, Id가 3, 5인 행은 빈 문자열('')입니다. NULL과 빈 문자열은 서로 다른 값이라는 점을 꼭 기억해 두세요.

4. NULL 값 개수 세기

CASE 문과 SUM 함수를 조합하면 NULL 값의 개수를 손쉽게 구할 수 있습니다.

mysql> select sum(case when FirstName IS NULL then 1 else 0 end) as NUMBER_OF_NULL_VALUE from DemoTable;

실행 결과:

+----------------------+
| NUMBER_OF_NULL_VALUE |
+----------------------+
| 3                    |
+----------------------+
1 row in set (0.00 sec)

쿼리 동작 원리

CASE WHEN FirstName IS NULL THEN 1 ELSE 0 END는 각 행마다 FirstName이 NULL이면 1, 그렇지 않으면 0을 반환합니다. SUM 함수가 이 값들을 모두 더하기 때문에 최종적으로 NULL인 행의 개수가 출력됩니다. 위 예제에서는 NULL이 3개이므로 결과값이 3입니다.

참고: NULL 개수를 세는 다른 방법들

CASE 문 외에도 아래와 같은 방법으로 NULL 개수를 구할 수 있습니다.

  • COUNT(*) - COUNT(컬럼명): 전체 행 수에서 NOT NULL 행 수를 빼면 NULL 개수가 됩니다.
  • SUM(ISNULL(FirstName)): MySQL의 ISNULL() 함수는 NULL이면 1, 아니면 0을 반환하므로 이를 합산하는 방식입니다.
  • COUNT(IF(FirstName IS NULL, 1, NULL)): IF 함수를 활용해 조건에 맞는 행만 세는 방식입니다.

만약 빈 문자열('')까지 함께 세고 싶다면 조건을 FirstName IS NULL OR FirstName = ''로 변경하면 됩니다.