MySQL에서 NOT NULL 값의 개수 계산하기
MySQL에서 특정 컬럼의 NULL이 아닌 값(NOT NULL)만 카운트하려면 집계 함수인 COUNT(컬럼명)을 사용하면 됩니다. COUNT 함수는 기본적으로 NULL 값을 제외하고 실제 값이 존재하는 행만 세기 때문에, 별도의 조건 처리 없이 간편하게 사용할 수 있습니다.
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
NumberOfQuestion int,
NumberOfSolution int
);
Query OK, 0 rows affected (0.20 sec)테이블에 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다. 이때 일부 값은 의도적으로 NULL로 입력합니다.
mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,10); Query OK, 1 row affected (0.06 sec) mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,2); Query OK, 1 row affected (0.04 sec) mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,NULL); Query OK, 1 row affected (0.03 sec) mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(20,NULL); Query OK, 1 row affected (0.05 sec) mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(30,19); Query OK, 1 row affected (0.04 sec) mysql> insert into DemoTable(NumberOfQuestion,NumberOfSolution) values(30,1); Query OK, 1 row affected (0.04 sec)
저장된 전체 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+------------------+------------------+ | Id | NumberOfQuestion | NumberOfSolution | +----+------------------+------------------+ | 1 | 20 | 10 | | 2 | 20 | 2 | | 3 | 20 | NULL | | 4 | 20 | NULL | | 5 | 30 | 19 | | 6 | 30 | 1 | +----+------------------+------------------+ 6 rows in set (0.00 sec)
NOT NULL 값만 카운트하는 쿼리
이제 값의 존재 여부를 카운트하는 쿼리를 살펴보겠습니다. COUNT 함수는 NULL 값을 자동으로 제외하므로, 아래 쿼리 결과에는 NULL이 아닌 값만 포함됩니다.
mysql> SELECT NumberOfQuestion, COUNT(NumberOfSolution) as NumberOfRows FROM DemoTable GROUP BY NumberOfQuestion;
실행 결과는 다음과 같습니다.
+------------------+--------------+ | NumberOfQuestion | NumberOfRows | +------------------+--------------+ | 20 | 2 | | 30 | 2 | +------------------+--------------+ 2 rows in set (0.00 sec)
결과 해석
결과를 보면 NumberOfQuestion이 20인 그룹은 총 4개의 행이 있지만, NumberOfSolution 값 중 2개가 NULL이므로 카운트 결과는 2가 됩니다. 마찬가지로 30인 그룹은 NULL이 없으므로 2로 표시됩니다.
이처럼 MySQL에서는 COUNT(컬럼명)을 GROUP BY와 함께 사용하면 NULL 값을 제외한 유효한 데이터의 개수를 손쉽게 집계할 수 있습니다. 참고로 COUNT(*)는 NULL 여부와 관계없이 모든 행을 세기 때문에, 두 방식의 차이를 정확히 이해하고 상황에 맞게 사용하는 것이 중요합니다.