테이블에서 특정 값이 몇 번 등장하는지 확인하려면 COUNT() 집계 함수를 GROUP BY 절과 함께 사용하면 됩니다. 이 조합은 각 그룹(값)별로 행의 개수를 손쉽게 집계해 주기 때문에 데이터 분석에서 가장 널리 쓰이는 패턴 중 하나입니다.
기본 문법
SELECT yourColumnName, COUNT(*) AS anyVariableName FROM yourTableName GROUP BY yourColumnName;
예제 테이블 생성
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리는 자동차 정보를 저장할 테이블을 생성합니다.
mysql> create table CountOccurrences
-> (
-> CarId int not null auto_increment,
-> CarName varchar(30),
-> PRIMARY KEY(CarId)
-> );
Query OK, 0 rows affected (0.68 sec)데이터 삽입
INSERT 명령으로 여러 개의 레코드를 추가합니다. 일부러 같은 차량 이름을 반복해서 입력하여 중복 값을 만들어 두었습니다.
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.10 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.20 sec)
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.15 sec)
mysql> insert into CountOccurrences(CarName) values('Honda');
Query OK, 1 row affected (0.20 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.11 sec)
mysql> insert into CountOccurrences(CarName) values('Audi');
Query OK, 1 row affected (0.18 sec)
mysql> insert into CountOccurrences(CarName) values('Aston Martin');
Query OK, 1 row affected (0.11 sec)
mysql> insert into CountOccurrences(CarName) values('Bugatti');
Query OK, 1 row affected (0.22 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.27 sec)
mysql> insert into CountOccurrences(CarName) values('Honda');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CountOccurrences(CarName) values('Audi');
Query OK, 1 row affected (0.13 sec)
mysql> insert into CountOccurrences(CarName) values('BMW');
Query OK, 1 row affected (0.12 sec)전체 레코드 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select *from CountOccurrences;
실행 결과는 다음과 같습니다.
+-------+--------------+ | CarId | CarName | +-------+--------------+ | 1 | Aston Martin | | 2 | BMW | | 3 | Aston Martin | | 4 | Honda | | 5 | BMW | | 6 | Audi | | 7 | Aston Martin | | 8 | Bugatti | | 9 | BMW | | 10 | Honda | | 11 | Audi | | 12 | BMW | +-------+--------------+ 12 rows in set (0.00 sec)
COUNT()와 GROUP BY로 발생 횟수 집계
이제 COUNT() 함수와 GROUP BY 절을 사용해 각 차량 이름이 몇 번 나타나는지 집계해 보겠습니다.
mysql> select CarName, count(*) as TotalCount from CountOccurrences
-> group by CarName;실행 결과는 다음과 같습니다.
+--------------+------------+ | CarName | TotalCount | +--------------+------------+ | Aston Martin | 3 | | BMW | 4 | | Honda | 2 | | Audi | 2 | | Bugatti | 1 | +--------------+------------+ 5 rows in set (0.00 sec)
결과 해석 및 추가 팁
위 결과를 보면 BMW가 4회로 가장 많이 등장했고, Aston Martin은 3회, Honda와 Audi는 각각 2회, Bugatti는 1회 등장한 것을 알 수 있습니다.
실무에서 유용하게 쓸 수 있는 몇 가지 확장 방법도 소개합니다.
- 내림차순 정렬:
ORDER BY TotalCount DESC를 추가하면 빈도가 높은 순서대로 정렬할 수 있습니다. - 특정 개수 이상만 필터링: GROUP BY 결과에 조건을 걸 때는 WHERE 대신
HAVING count(*) >= 2처럼 HAVING 절을 사용해야 합니다. - NULL 처리: COUNT(*)는 NULL이 포함된 행도 개수에 포함하지만, 특정 컬럼 기준으로 세려면 COUNT(columnName)을 사용하세요. 이 경우 해당 컬럼이 NULL인 행은 제외됩니다.
이처럼 COUNT()와 GROUP BY의 조합은 로그 분석, 카테고리별 통계, 중복 데이터 점검 등 다양한 상황에서 활용할 수 있는 MySQL의 핵심 집계 기법입니다.