MySQL에서 특정 열에 중복된 값이 몇 번씩 나타나는지 확인하려면 GROUP BY 절을 사용해야 합니다. 여기에 레코드 개수를 세는 COUNT(*) 함수와 결과를 정렬하는 ORDER BY 절을 함께 사용하면 됩니다.
기본 문법
select count(*) as 별칭이름 from 테이블명 group by 열이름 order By 별칭이름 DESC;
예제 테이블 생성
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
Number int
);
Query OK, 0 rows affected (0.82 sec)데이터 삽입
insert 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다. 의도적으로 중복 값을 포함시켰습니다.
mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.26 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.09 sec) mysql> insert into DemoTable values(110); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(120); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(90); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(120); Query OK, 1 row affected (0.13 sec)
전체 데이터 조회
select 문을 사용해 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+--------+ | Number | +--------+ | 90 | | 100 | | 110 | | 90 | | 100 | | 90 | | 120 | | 100 | | 90 | | 120 | +--------+ 10 rows in set (0.00 sec)
중복 레코드 개수 집계 및 정렬 쿼리
다음은 각 값이 중복된 횟수를 집계한 뒤, 개수가 많은 순서대로(내림차순) 정렬하는 쿼리입니다.
mysql> select count(*) as Occured from DemoTable group by Number order By Occured DESC;
실행 결과는 다음과 같습니다.
+---------+ | Occured | +---------+ | 4 | | 3 | | 2 | | 1 | +---------+ 4 rows in set (0.00 sec)
결과 해석
위 출력 결과를 보면 다음과 같이 해석할 수 있습니다.
- 90: 4번 중복됨
- 100: 3번 중복됨
- 120: 2번 중복됨
- 110: 1번만 등장함
이처럼 GROUP BY로 열 값을 그룹화하고, COUNT(*)로 각 그룹의 레코드 수를 계산한 후, ORDER BY ... DESC를 적용하면 중복 횟수가 많은 순서대로 손쉽게 정렬된 결과를 얻을 수 있습니다. 이 기법은 데이터 정제 작업이나 중복 데이터 분석 시 매우 유용하게 활용됩니다.