개요
MySQL에서 특정 열에 저장된 값들이 각각 몇 번 나타나는지(발생 횟수) 집계하고, 그 결과를 새로운 열 형태로 확인하는 방법을 소개합니다. 이 작업은 GROUP BY 절과 COUNT() 집계 함수를 함께 사용하면 간단하게 처리할 수 있습니다.
1. 테이블 생성하기
먼저 실습에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable
(
Value int
);
Query OK, 0 rows affected (0.57 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 몇 개의 레코드를 입력합니다. 집계 결과를 확인하기 위해 일부러 중복된 값도 포함시켰습니다.
mysql> insert into DemoTable values(80);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(80);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values(90);
Query OK, 1 row affected (0.12 sec)
3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------+
| Value |
+-------+
| 80 |
| 90 |
| 90 |
| 80 |
| 100 |
| 90 |
+-------+
6 rows in set (0.00 sec)
4. 고유 값별 발생 횟수 계산하기
이제 GROUP BY 절로 값을 그룹화한 뒤 COUNT(*)로 각 그룹의 건수를 세면, 고유 값별 발생 횟수를 구할 수 있습니다.
mysql> select Value,count(*) from DemoTable group by Value;
결과를 보면 각 값 옆의 새로운 열(count(*))에 발생 횟수가 표시됩니다.
+-------+----------+
| Value | count(*) |
+-------+----------+
| 80 | 2 |
| 90 | 3 |
| 100 | 1 |
+-------+----------+
3 rows in set (0.00 sec)
정리
위 결과에서 알 수 있듯이 80은 2번, 90은 3번, 100은 1번 나타났습니다. 이처럼 GROUP BY와 COUNT()를 조합하면 별도의 서브쿼리나 애플리케이션 로직 없이도 데이터 분포를 손쉽게 파악할 수 있습니다. 참고로 결과 열 이름을 더 직관적으로 바꾸고 싶다면 count(*) AS OccurrenceCount처럼 별칭(Alias)을 지정하는 것도 좋은 방법입니다.