MySQL에서 NULL 값을 무시하고 특정 열의 값 개수를 계산하려면 COUNT() 함수를 사용하면 됩니다. COUNT() 함수는 기본적으로 NULL 값을 집계에서 제외하기 때문에 별도의 조건 처리 없이 간단하게 원하는 결과를 얻을 수 있습니다.
실제 예제를 통해 확인해 보겠습니다. 먼저 테이블을 생성합니다.
mysql> create table DemoTable
-> (
-> Name varchar(100),
-> CountryName varchar(100)
-> );
Query OK, 0 rows affected (0.49 sec)
다음으로 insert 명령을 사용해 몇 개의 레코드를 삽입합니다. 이때 일부 레코드에는 의도적으로 NULL 값을 넣습니다.
mysql> insert into DemoTable values('John',null);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris','US');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Robert',null);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Bob','UK');
Query OK, 1 row affected (0.57 sec)select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+--------+-------------+
| Name | CountryName |
+--------+-------------+
| John | NULL |
| Chris | US |
| Robert | NULL |
| Bob | UK |
+--------+-------------+
4 rows in set (0.00 sec)
테이블에는 총 4개의 레코드가 있으며, CountryName 열에는 NULL 값이 2개 포함되어 있습니다.
COUNT()로 NULL 제외하고 개수 세기
이제 COUNT() 함수를 사용하여 NULL을 자동으로 제외하고 열 값을 계산하는 쿼리입니다.
mysql> select count(Name) AS TotalName,count(CountryName) AS CountryWhichIsNotNull from DemoTable;
출력 결과
쿼리 실행 결과는 다음과 같습니다.
+-----------+-----------------------+
| TotalName | CountryWhichIsNotNull |
+-----------+-----------------------+
| 4 | 2 |
+-----------+-----------------------+
1 row in set (0.00 sec)
결과 분석
실행 결과를 살펴보면 다음과 같은 의미를 가집니다.
TotalName = 4: Name 열에는 NULL 값이 없으므로 전체 4개 행이 모두 집계되었습니다.
CountryWhichIsNotNull = 2: CountryName 열에는 NULL 값이 2개 있었기 때문에, COUNT()가 NULL을 제외한 나머지 2개(US, UK)만 집계했습니다.
이처럼 COUNT(열이름) 형태로 사용하면 해당 열의 NULL 값을 자동으로 제외하고 개수를 계산할 수 있습니다. 참고로 COUNT(*)를 사용하면 NULL 여부와 관계없이 모든 행의 개수를 반환한다는 점도 함께 기억해 두면 좋습니다.