MySQL에서 특정 값이 몇 번 등장했는지, 즉 가장 자주 발생하는 값의 빈도를 확인하고 싶다면 집계 함수 COUNT()와 GROUP BY 절을 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 직접 만들어 보고, 각 값별 발생 횟수를 내림차순으로 정렬해 조회하는 방법을 단계별로 살펴보겠습니다.
1단계: 예제 테이블 생성
먼저 데모용 테이블을 생성합니다. Id 컬럼은 자동 증가 기본키로 설정하고, Value 컬럼에는 임의의 정수 값을 저장합니다.
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Value int ); Query OK, 0 rows affected (0.74 sec)
2단계: 데이터 삽입
insert 명령을 사용해 테이블에 레코드를 삽입합니다. 빈도 차이를 확인할 수 있도록 일부러 동일한 값이 여러 번 반복되도록 입력했습니다.
mysql> insert into DemoTable(Value) values(976); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.27 sec) mysql> insert into DemoTable(Value) values(90); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.41 sec) mysql> insert into DemoTable(Value) values(67); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable(Value) values(976); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable(Value) values(90); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable(Value) values(1); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable(Value) values(10); Query OK, 1 row affected (0.09 sec)
3단계: 전체 데이터 확인
select 문을 사용해 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+----+-------+ | Id | Value | +----+-------+ | 1 | 976 | | 2 | 67 | | 3 | 67 | | 4 | 1 | | 5 | 90 | | 6 | 1 | | 7 | 67 | | 8 | 976 | | 9 | 90 | | 10 | 1 | | 11 | 10 | +----+-------+ 11 rows in set (0.00 sec)
4단계: 값별 발생 빈도 조회
다음은 MySQL에서 각 값이 몇 번 발생했는지 개수를 구하고, 빈도가 높은 순서대로 정렬하는 쿼리입니다. 핵심은 GROUP BY로 Value를 그룹화한 뒤 COUNT()로 개수를 세고, 별칭(alias)을 기준으로 ORDER BY ... DESC로 내림차순 정렬하는 것입니다.
mysql> select Value,COUNT(Value) AS ValueFrequency from DemoTable group by Value order by ValueFrequency DESC;
출력 결과
+-------+----------------+ | Value | ValueFrequency | +-------+----------------+ | 67 | 3 | | 1 | 3 | | 90 | 2 | | 976 | 2 | | 10 | 1 | +-------+----------------+ 5 rows in set (0.09 sec)
결과를 보면 값 67과 1이 각각 3번으로 가장 많이 나타났으며, 그 다음으로 90과 976이 2번씩, 마지막으로 10이 1번 나타난 것을 확인할 수 있습니다. 이처럼 COUNT()와 GROUP BY, ORDER BY만 조합하면 별도의 복잡한 처리 없이도 손쉽게 최빈값 분석이 가능합니다.