Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 중복·삼중 데이터를 가진 열의 레코드 개수를 세는 방법

중복 데이터가 포함된 예시 테이블

다음과 같은 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 절을 함께 사용하면 테이블 내 중복 또는 삼중 데이터의 분포를 손쉽게 파악할 수 있습니다.