MySQL에서 하나의 쿼리로 여러 조건에 해당하는 레코드 수를 각각 집계해야 하는 경우가 자주 있습니다. 이럴 때 CASE 문과 SUM() 함수를 함께 사용하면 단일 쿼리로 손쉽게 처리할 수 있습니다.
예제 시나리오
이번 예제에서는 직원 성별 정보가 저장된 컬럼에서 남성(Male)과 여성(Female) 레코드의 개수를 각각 조회하는 방법을 알아보겠습니다.
1. 테이블 생성
먼저 ENUM 타입으로 성별 값을 정의한 테이블을 생성합니다.
mysql> create table DemoTable
(
EmployeeGender ENUM('Male','Female')
);
Query OK, 0 rows affected (0.52 sec)2. 샘플 데이터 삽입
INSERT 명령을 사용하여 테스트용 레코드를 입력합니다.
mysql> insert into DemoTable values('Male');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Female');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Male');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Female');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('Male');
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable values('Female');
Query OK, 1 row affected (0.08 sec)3. 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----------------+ | EmployeeGender | +----------------+ | Male | | Female | | Male | | Female | | Male | | Female | +----------------+ 6 rows in set (0.00 sec)
단일 쿼리로 남성·여성 직원 수 집계하기
아래 쿼리처럼 CASE 문으로 조건을 판별하고, SUM() 함수로 조건을 만족하는 레코드만 합산하면 하나의 쿼리에서 두 개의 집계 결과를 동시에 얻을 수 있습니다.
mysql> select sum(case when EmployeeGender='Male' then 1 else 0 end) as Total_Number_Of_Male_Employee, sum(case when EmployeeGender='Female' then 1 else 0 end) as Total_Number_Of_Female_Employee from DemoTable;
실행 결과는 다음과 같습니다.
+-------------------------------+---------------------------------+ | Total_Number_Of_Male_Employee | Total_Number_Of_Female_Employee | +-------------------------------+---------------------------------+ | 3 | 3 | +-------------------------------+---------------------------------+ 1 row in set (0.00 sec)
동작 원리 설명
이 쿼리의 핵심은 CASE 문의 반환 값입니다. 조건(EmployeeGender='Male')이 참이면 1을, 거짓이면 0을 반환하도록 설정합니다. SUM() 함수는 이 값들을 모두 더하기 때문에, 결국 조건에 일치하는 레코드의 개수와 동일한 결과가 됩니다.
이 방식은 GROUP BY 없이도 여러 조건별 개수를 한 번에 조회할 수 있어, 대시보드 통계나 요약 리포트를 만들 때 특히 유용합니다. 또한 COUNT(CASE WHEN ...) 형태로 응용하거나, 조건을 추가하여 세 개 이상의 집계도 같은 방식으로 확장할 수 있습니다.