단일 쿼리에서 여러 조건의 COUNT()를 한 번에 구하는 방법
MySQL에서 여러 조건에 대한 개수를 각각 세고 싶을 때, 쿼리를 여러 번 실행할 필요가 없습니다. GROUP BY 절을 사용하면 단 하나의 쿼리로 조건별 COUNT() 결과를 한 번에 얻을 수 있습니다.
기본 문법
GROUP BY를 활용한 기본 문법은 다음과 같습니다.
SELECT yourColumnName, COUNT(*) FROM yourTableName GROUP BY yourColumnName;
이 문법은 지정한 컬럼의 값별로 데이터를 그룹화한 뒤, 각 그룹에 속한 행의 개수를 집계합니다.
실습 예제: 테이블 생성하기
문법을 이해하기 위해 먼저 실습용 테이블을 만들어 보겠습니다. 아래 쿼리로 MultipleCountDemo 테이블을 생성합니다.
mysql> create table MultipleCountDemo -> ( -> Id int, -> Name varchar(100), -> Age int -> ); Query OK, 0 rows affected (2.17 sec)
테이블이 정상적으로 생성되었습니다. 이제 INSERT 명령으로 샘플 데이터를 입력합니다.
샘플 데이터 삽입
mysql> insert into MultipleCountDemo values(1,'Carol',21); Query OK, 1 row affected (0.27 sec) mysql> insert into MultipleCountDemo values(2,'Sam',21); Query OK, 1 row affected (0.29 sec) mysql> insert into MultipleCountDemo values(3,'Bob',22); Query OK, 1 row affected (0.10 sec) mysql> insert into MultipleCountDemo values(4,'John',23); Query OK, 1 row affected (0.24 sec) mysql> insert into MultipleCountDemo values(5,'David',22); Query OK, 1 row affected (0.12 sec) mysql> insert into MultipleCountDemo values(6,'Adam',22); Query OK, 1 row affected (0.21 sec) mysql> insert into MultipleCountDemo values(7,'Johnson',23); Query OK, 1 row affected (0.14 sec) mysql> insert into MultipleCountDemo values(8,'Elizabeth',23); Query OK, 1 row affected (0.25 sec)
총 8명의 데이터가 나이(Age) 값과 함께 저장되었습니다.
저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from MultipleCountDemo;
실행 결과는 다음과 같습니다.
+------+-----------+------+ | Id | Name | Age | +------+-----------+------+ | 1 | Carol | 21 | | 2 | Sam | 21 | | 3 | Bob | 22 | | 4 | John | 23 | | 5 | David | 22 | | 6 | Adam | 22 | | 7 | Johnson | 23 | | 8 | Elizabeth | 23 | +------+-----------+------+ 8 rows in set (0.00 sec)
데이터를 보면 나이 21세가 2명, 22세가 3명, 23세가 3명인 것을 눈으로 확인할 수 있습니다.
GROUP BY로 조건별 COUNT() 집계하기
이제 핵심인 단일 쿼리로 여러 조건의 COUNT()를 구하는 방법입니다. 나이(Age) 컬럼을 기준으로 그룹화하여 집계하는 쿼리는 다음과 같습니다.
mysql> select Age, count(*) as AllSingleCount from MultipleCountDemo group by Age;
실행 결과는 다음과 같습니다.
+------+----------------+ | Age | AllSingleCount | +------+----------------+ | 21 | 2 | | 22 | 3 | | 23 | 3 | +------+----------------+ 3 rows in set (0.00 sec)
결과 해석 및 정리
위 결과에서 알 수 있듯이, GROUP BY 절은 Age 컬럼의 고유한 값(21, 22, 23)별로 행을 묶어주고, COUNT(*) 함수는 각 그룹에 포함된 레코드 수를 반환합니다. 별칭(alias)인 AllSingleCount를 사용하면 결과 컬럼의 의미를 더 명확하게 표현할 수 있습니다.
이처럼 GROUP BY와 COUNT(*)를 함께 사용하면 쿼리를 여러 번 작성하지 않고도 조건별 건수를 한 번의 쿼리로 효율적으로 집계할 수 있습니다. 이 방식은 통계 리포트, 대시보드 집계 등 다양한 상황에서 유용하게 활용됩니다.