MySQL에서 열별 최다 빈도 상위 10개 값 구하는 방법
MySQL에서 특정 열(column)에 가장 많이 등장하는 상위 10개 값을 조회하려면 GROUP BY로 값을 그룹화한 뒤, COUNT(*) 기준으로 내림차순 정렬하고 LIMIT 10으로 결과 개수를 제한하면 됩니다. 기본 문법은 다음과 같습니다.
SELECT yourColumnName, count(*) FROM yourTableName GROUP BY yourColumnName ORDER BY count(*) DESC LIMIT 10;
예제 테이블 생성
쿼리의 동작 방식을 이해하기 위해 먼저 테이블을 생성해 보겠습니다.
mysql> create table countTop10Demo -> ( -> Value int -> ); Query OK, 0 rows affected (0.74 sec)
샘플 데이터 입력
INSERT 명령을 사용해 테이블에 여러 레코드를 삽입합니다.
mysql> insert into countTop10Demo values(10); Query OK, 1 row affected (0.12 sec) mysql> insert into countTop10Demo values(1100); Query OK, 1 row affected (0.11 sec) mysql> insert into countTop10Demo values(200); Query OK, 1 row affected (0.11 sec) mysql> insert into countTop10Demo values(2100); Query OK, 1 row affected (0.10 sec) mysql> insert into countTop10Demo values(1100); Query OK, 1 row affected (0.11 sec) mysql> insert into countTop10Demo values(450); Query OK, 1 row affected (0.28 sec) mysql> insert into countTop10Demo values(600); Query OK, 1 row affected (0.12 sec) mysql> insert into countTop10Demo values(2100); Query OK, 1 row affected (0.16 sec) mysql> insert into countTop10Demo values(150); Query OK, 1 row affected (0.16 sec) mysql> insert into countTop10Demo values(16454); Query OK, 1 row affected (0.10 sec) mysql> insert into countTop10Demo values(450); Query OK, 1 row affected (0.12 sec) mysql> insert into countTop10Demo values(2350); Query OK, 1 row affected (0.10 sec) mysql> insert into countTop10Demo values(1780); Query OK, 1 row affected (0.15 sec) mysql> insert into countTop10Demo values(1345); Query OK, 1 row affected (0.22 sec) mysql> insert into countTop10Demo values(34); Query OK, 1 row affected (0.15 sec) mysql> insert into countTop10Demo values(2100); Query OK, 1 row affected (0.08 sec) mysql> insert into countTop10Demo values(19034); Query OK, 1 row affected (0.12 sec) mysql> insert into countTop10Demo values(1844); Query OK, 1 row affected (0.11 sec) mysql> insert into countTop10Demo values(34); Query OK, 1 row affected (0.08 sec) mysql> insert into countTop10Demo values(16454); Query OK, 1 row affected (0.19 sec)
전체 데이터 확인
SELECT 문을 사용해 테이블의 모든 레코드를 조회합니다.
mysql> select *from countTop10Demo;
실행 결과는 다음과 같습니다.
+-------+ | Value | +-------+ | 10 | | 1100 | | 200 | | 2100 | | 1100 | | 450 | | 600 | | 2100 | | 150 | | 16454 | | 450 | | 2350 | | 1780 | | 1345 | | 34 | | 2100 | | 19034 | | 1844 | | 34 | | 16454 | +-------+ 20 rows in set (0.00 sec)
상위 10개 최다 빈도 값 조회
이제 MySQL에서 특정 열의 가장 많이 등장하는 상위 10개 값을 조회하는 쿼리는 다음과 같습니다.
mysql> SELECT Value, count(*) -> FROM countTop10Demo -> GROUP BY Value -> ORDER BY count(*) DESC -> LIMIT 10;
실행 결과는 다음과 같습니다.
+-------+----------+ | Value | count(*) | +-------+----------+ | 2100 | 3 | | 1100 | 2 | | 34 | 2 | | 450 | 2 | | 16454 | 2 | | 1780 | 1 | | 200 | 1 | | 1345 | 1 | | 19034 | 1 | | 600 | 1 | +-------+----------+ 10 rows in set (0.00 sec)
결과를 보면 2100이 3번으로 가장 많이 등장했고, 1100, 34, 450, 16454가 각각 2번씩 등장한 것을 확인할 수 있습니다. 이처럼 GROUP BY와 COUNT(*), ORDER BY, LIMIT를 조합하면 대량의 데이터에서도 손쉽게 최다 빈도 값을 분석할 수 있습니다.