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번으로 가장 많이 등장한 값임을 확인할 수 있습니다. 이 방식은 로그 분석, 인기 항목 집계 등 실무에서 가장 자주 쓰이는 패턴 중 하나이므로 꼭 익혀 두시길 권장합니다.