MySQL에서 개수가 가장 많은 필드 값을 반환하는 방법
MySQL에서 특정 컬럼에 저장된 값 중 가장 많이 등장하는 값을 찾고 싶다면, GROUP BY로 데이터를 그룹화한 뒤 ORDER BY COUNT(*)를 내림차순으로 정렬하고 LIMIT 1을 사용하면 됩니다.
이번 글에서는 예제 테이블을 만들고, 실제 쿼리를 통해 가장 많이 등장하는 이름을 조회하는 과정을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성하기
먼저 테스트용 테이블을 생성합니다.
mysql> create table DemoTable1940
(
FirstName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 여러 개의 레코드를 입력합니다. 일부러 같은 이름이 여러 번 들어가도록 구성했습니다.
mysql> insert into DemoTable1940 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Adam');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1940 values('Mike');
Query OK, 1 row affected (0.00 sec)3. 전체 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1940;
실행 결과는 다음과 같습니다.
+-----------+ | FirstName | +-----------+ | Chris | | Mike | | Adam | | Mike | | Chris | | David | | Mike | +-----------+ 7 rows in set (0.00 sec)
데이터를 보면 'Mike'가 3번, 'Chris'는 2번, 'Adam'과 'David'는 각각 1번씩 등장합니다. 따라서 쿼리 결과로 'Mike'가 반환되어야 합니다.
4. 가장 많이 등장하는 값 조회 쿼리
핵심 쿼리는 다음과 같습니다. GROUP BY로 이름별 개수를 집계한 후, COUNT(*) 기준으로 내림차순 정렬하여 상위 1개만 가져옵니다.
mysql> select * from DemoTable1940
group by FirstName
order by count(*) desc
limit 1;실행 결과:
+-----------+ | FirstName | +-----------+ | Mike | +-----------+ 1 row in set (0.00 sec)
쿼리 동작 원리 정리
- GROUP BY FirstName: 이름별로 레코드를 그룹화합니다.
- COUNT(*): 각 그룹에 속한 레코드 수를 계산합니다.
- ORDER BY count(*) DESC: 개수가 많은 순서대로 내림차순 정렬합니다.
- LIMIT 1: 정렬된 결과 중 첫 번째 행, 즉 개수가 가장 많은 값만 반환합니다.
참고: 개수까지 함께 출력하기
단순히 값만 아니라 몇 번 등장했는지도 함께 보고 싶다면 다음과 같이 작성할 수 있습니다.
mysql> select FirstName, count(*) as cnt
from DemoTable1940
group by FirstName
order by cnt desc
limit 1;이렇게 하면 'Mike'와 함께 등장 횟수인 3이 함께 출력됩니다. 실무에서는 이 형태가 더 유용하게 활용됩니다.