MySQL 테이블에서 NULL이 아니고 0도 아닌 열의 개수를 계산하려면 if() 함수를 사용하면 됩니다. 각 열에 대해 조건식을 평가해 조건을 만족하면 1, 만족하지 않으면 0을 반환하고, 그 결과를 더하는 방식으로 개수를 구할 수 있습니다.
1단계: 테이블 생성
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> Number1 int, -> Number2 int -> ); Query OK, 0 rows affected (1.15 sec)
2단계: 데이터 삽입
insert 명령을 사용해 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable(Number1,Number2) values(10,20); Query OK, 1 row affected (0.41 sec) mysql> insert into DemoTable(Number1,Number2) values(0,32); Query OK, 1 row affected (0.38 sec) mysql> insert into DemoTable(Number1,Number2) values(40,0); Query OK, 1 row affected (0.21 sec) mysql> insert into DemoTable(Number1,Number2) values(40,50); Query OK, 1 row affected (0.17 sec)
3단계: 저장된 데이터 확인
select 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+----+---------+---------+ | Id | Number1 | Number2 | +----+---------+---------+ | 1 | 10 | 20 | | 2 | 0 | 32 | | 3 | 40 | 0 | | 4 | 40 | 50 | +----+---------+---------+ 4 rows in set (0.00 sec)
NULL 또는 0이 아닌 열 개수 세기
다음 쿼리는 테이블에서 NULL이 아니고 0이 아닌 열의 개수를 계산합니다.
mysql> select *, -> if(Number1 <> 0,1,0)+if(Number2 <> 0,1,0) AS TotalCount -> from DemoTable;
출력 결과
+----+---------+---------+------------+ | Id | Number1 | Number2 | TotalCount | +----+---------+---------+------------+ | 1 | 10 | 20 | 2 | | 2 | 0 | 32 | 1 | | 3 | 40 | 0 | 1 | | 4 | 40 | 50 | 2 | +----+---------+---------+------------+ 4 rows in set (0.00 sec)
쿼리 동작 원리
if(Number1 <> 0, 1, 0)은 Number1 열의 값이 0이 아니면 1을, 0이면 0을 반환합니다. 참고로 값이 NULL인 경우 비교 결과 역시 거짓으로 처리되므로, 이 조건 하나로 NULL과 0을 동시에 걸러낼 수 있습니다.
두 조건식의 결과를 더하면 해당 행에서 유효한 값을 가진 열의 개수가 됩니다. 예를 들어 위 결과에서 Id가 2인 행은 Number1이 0이고 Number2가 32이므로 TotalCount가 1이 되며, Id가 4인 행은 두 열 모두 0이 아니므로 TotalCount가 2가 됩니다.