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

MySQL COUNT()와 GROUP BY로 컬럼별 발생 횟수 집계하기

테이블에서 특정 값이 몇 번 등장하는지 확인하려면 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의 핵심 집계 기법입니다.