중복 데이터가 포함된 예시 테이블
다음과 같은 stock_item이라는 테이블이 있다고 가정해 보겠습니다. 이 테이블의 quantity 열에는 중복된 값들이 존재합니다. 즉, 'Notebooks'와 'Pencil' 항목의 경우 quantity 열에 동일한 값 40이 두 번 나타나며, 'Shirts', 'Shoes', 'Trousers' 항목의 경우 값 29가 세 번 반복됩니다. 아래 표를 참고하세요.
mysql> Select * from stock_item; +------------+----------+ | item_name |quantity | +------------+----------+ | Calculator | 89 | | Notebooks | 40 | | Pencil | 40 | | Pens | 32 | | Shirts | 29 | | Shoes | 29 | | Trousers | 29 | +------------+----------+ 7 rows in set (0.00 sec)
COUNT, GROUP BY, HAVING으로 중복 값 개수 구하기
이제 다음 쿼리를 사용하면 quantity 열에 몇 번씩 반복되는 값이 있는지, 그리고 각각 몇 개의 레코드로 중복되어 있는지 한눈에 확인할 수 있습니다.
mysql> Select COUNT(quantity) AS duplicate_triplicate
-> from stock_item
-> group by quantity having duplicate_triplicate> 1;
+----------------------+
| duplicate_triplicate |
+----------------------+
| 3 |
| 2 |
+----------------------+
2 rows in set (0.00 sec)쿼리 동작 원리
이 쿼리는 세 단계로 작동합니다.
1. GROUP BY quantity: 동일한 수량 값을 가진 레코드들을 그룹으로 묶습니다.
2. COUNT(quantity): 각 그룹에 속한 레코드 수를 계산합니다.
3. HAVING duplicate_triplicate > 1: 한 번만 등장하는 고유 값은 제외하고, 두 번 이상 반복되는 값만 결과로 남깁니다.
결과 해석
위 실행 결과를 보면 quantity 열에는 세 번 반복되는 값(29)이 하나 있고, 두 번 반복되는 값(40)도 하나 있다는 것을 알 수 있습니다. 이처럼 GROUP BY와 HAVING 절을 함께 사용하면 테이블 내 중복 또는 삼중 데이터의 분포를 손쉽게 파악할 수 있습니다.