Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 단일 쿼리에서 여러 조건별 COUNT() 집계하기 – GROUP BY 완벽 가이드

단일 쿼리에서 여러 조건의 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(*)를 함께 사용하면 쿼리를 여러 번 작성하지 않고도 조건별 건수를 한 번의 쿼리로 효율적으로 집계할 수 있습니다. 이 방식은 통계 리포트, 대시보드 집계 등 다양한 상황에서 유용하게 활용됩니다.