개요
레코드 개수를 셀 때는 집계 함수 SUM()을 사용하고, 조건을 적용한 개수를 구하려면 WHERE 절로 조건을 지정해야 합니다. 이번 글에서는 실제 예제를 통해 조건부 카운트를 구하는 방법을 단계별로 알아보겠습니다. 먼저 예제로 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1515
-> (
-> ClientId varchar(10),
-> ClientName varchar(20)
-> );
Query OK, 0 rows affected (0.53 sec)
테이블에 데이터 삽입하기
insert 명령어를 사용해 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1515 values('CLI-110','David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1515 values('CLI-101','Bob');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1515 values('CLI-101','Mike');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1515 values('CLI-130','Mike');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable1515 values('CLI-101','Chris');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1515 values('CLI-101','Sam');
Query OK, 1 row affected (0.18 sec)저장된 데이터 확인하기
select 문을 사용해 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1515;
실행 결과는 다음과 같습니다.
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| CLI-101 | Chris |
| CLI-110 | David |
| CLI-101 | Bob |
| CLI-101 | Sam |
| CLI-101 | Sam |
| CLI-101 | Mike |
| CLI-130 | Mike |
| CLI-101 | Chris |
| CLI-101 | Sam |
+----------+------------+
9 rows in set (0.00 sec)
결과를 보면 전체 9개 레코드 중 CLI-101에 해당하는 레코드는 7개이며, 그중 이름이 'Sam'인 레코드는 3개입니다. 이제 이 두 값을 하나의 쿼리로 동시에 조회하는 방법을 살펴보겠습니다.
조건을 적용해 개수 세기
다음은 조건을 적용해 개수를 세는 쿼리입니다.
mysql> select ClientId,sum(ClientName='Sam') as NameOn101Id,count(*) as TotalNameOn101 from DemoTable1515
-> where ClientId='CLI-101';
실행 결과는 다음과 같습니다.
+----------+-------------+----------------+
| ClientId | NameOn101Id | TotalNameOn101 |
+----------+-------------+----------------+
| CLI-101 | 3 | 7 |
+----------+-------------+----------------+
1 row in set (0.00 sec)
핵심 원리: 불리언 표현식의 활용
MySQL에서는 ClientName='Sam'과 같은 비교 표현식이 조건이 참일 때 1, 거짓일 때 0을 반환합니다. 따라서 이 표현식을 SUM() 함수로 감싸면 특정 조건을 만족하는 행의 개수를 간단하게 구할 수 있습니다.
또한 COUNT(*)를 함께 사용하면 WHERE 절로 필터링된 전체 행 개수와 특정 조건을 만족하는 행 개수를 한 번의 쿼리로 동시에 확인할 수 있습니다. 덕분에 서브쿼리나 여러 번의 조회 없이도 효율적으로 통계를 처리할 수 있습니다.