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

MySQL에서 COUNT()와 GROUP BY로 가장 많이 등장하는 값(최대 빈도) 구하기

MySQL에서 특정 열에 있는 각 고유 값이 몇 번씩 등장하는지 집계하고, 그중 가장 많이 나타난 값을 찾으려면 COUNT() 함수와 GROUP BY 절을 함께 사용하면 됩니다. 이 글에서는 예제 테이블을 만들고 단계별로 쿼리를 작성해 보겠습니다.

1. 예제 테이블 생성

먼저 테스트에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.69 sec)

2. 데이터 삽입

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.16 sec)

mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.25 sec)

mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.24 sec)

mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.18 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.

mysql> select *from DemoTable;

출력 결과

+-------+
| Name  |
+-------+
| John  |
| Sam   |
| John  |
| Mike  |
| John  |
| Sam   |
| Carol |
+-------+
7 rows in set (0.00 sec)

4. 최대 빈도를 가진 값 조회하기

각 이름별로 등장 횟수를 집계한 뒤, 내림차순으로 정렬하고 상위 1개만 가져오는 쿼리입니다.

mysql> select Name, count(*) as freq from DemoTable group by Name order by count(*) desc limit 1;

출력 결과

+------+------+
| Name | freq |
+------+------+
| John | 3    |
+------+------+
1 row in set (0.00 sec)

쿼리 동작 원리

  • GROUP BY Name : 같은 이름을 가진 행들을 하나의 그룹으로 묶습니다.
  • COUNT(*) AS freq : 각 그룹에 속한 레코드 수를 세어 freq라는 별칭으로 표시합니다.
  • ORDER BY COUNT(*) DESC : 빈도가 높은 순서대로 내림차순 정렬합니다.
  • LIMIT 1 : 가장 많이 등장한 값 한 건만 반환합니다.

실행 결과 'John'이 총 3번으로 가장 많이 등장한 값임을 확인할 수 있습니다. 이 방식은 로그 분석, 인기 항목 집계 등 실무에서 가장 자주 쓰이는 패턴 중 하나이므로 꼭 익혀 두시길 권장합니다.