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

MySQL에서 특정 열의 가장 많이 등장하는 상위 10개 값 조회하기

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를 조합하면 대량의 데이터에서도 손쉽게 최다 빈도 값을 분석할 수 있습니다.