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

MySQL에서 가장 자주 발생하는 값의 빈도 수 구하기

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)

결과를 보면 값 671이 각각 3번으로 가장 많이 나타났으며, 그 다음으로 90과 976이 2번씩, 마지막으로 10이 1번 나타난 것을 확인할 수 있습니다. 이처럼 COUNT()GROUP BY, ORDER BY만 조합하면 별도의 복잡한 처리 없이도 손쉽게 최빈값 분석이 가능합니다.