MySQL에서 하나의 열(컬럼)에 같은 값이 몇 번 반복되어 저장되어 있는지 확인하고 싶을 때가 있습니다. 이럴 때는 GROUP BY 절과 COUNT() 함수를 함께 사용하면 간단하게 해결할 수 있습니다. 아래 예제를 통해 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 예제에 사용할 테이블을 생성합니다.
mysql> create table DemoTable -> ( -> Number int -> ); Query OK, 0 rows affected (0.83 sec)
2. 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 레코드를 추가합니다. 의도적으로 중복된 값(20, 10)을 포함시켰습니다.
mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(30); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.47 sec) mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.15 sec)
3. 전체 레코드 조회하기
SELECT 문으로 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+--------+ | Number | +--------+ | 20 | | 20 | | 10 | | 30 | | 10 | | 10 | +--------+ 6 rows in set (0.00 sec)
4. 중복 값 개수 세기
단일 열에서 각 값이 몇 번 나타나는지 확인하려면 GROUP BY와 COUNT(*)를 사용한 다음 쿼리를 실행합니다.
mysql> select Number,count(*) from DemoTable group by Number;
실행 결과는 다음과 같습니다.
+--------+----------+ | Number | count(*) | +--------+----------+ | 20 | 2 | | 10 | 3 | | 30 | 1 | +--------+----------+ 3 rows in set (0.00 sec)
결과 해석
쿼리 결과를 보면 다음과 같은 의미입니다.
- 20은 총 2번 등장했습니다.
- 10은 총 3번 등장했습니다.
- 30은 총 1번 등장했습니다.
이처럼 GROUP BY로 열의 값을 그룹화한 뒤 COUNT(*)로 각 그룹의 행 개수를 집계하면, 단일 열에 포함된 중복 값의 개수를 손쉽게 파악할 수 있습니다. 참고로 결과를 개수 기준 내림차순으로 정렬하고 싶다면 쿼리 끝에 ORDER BY count(*) DESC를 추가하면 됩니다.