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

MySQL 테이블의 특정 열에서 총 중복 레코드 개수 계산하는 방법

MySQL 테이블의 열에서 총 중복 레코드 개수 구하기

데이터베이스 작업을 하다 보면 특정 열에 중복된 값이 몇 종류나 있는지 확인해야 하는 경우가 자주 있습니다. 이번 글에서는 MySQL의 GROUP BYHAVING 절을 활용해 중복 레코드의 개수를 손쉽게 계산하는 방법을 알아보겠습니다.

예제 테이블 살펴보기

먼저 다음과 같은 stock_item 테이블이 있다고 가정해 보겠습니다. 이 테이블의 quantity(수량) 열에는 중복된 값들이 포함되어 있는데, 품목명이 'Notebooks'와 'Pencil'인 항목은 수량 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)

테이블을 보면 알 수 있듯이, quantity 열에는 4029, 두 개의 중복 값이 존재합니다. 즉, 중복된 수량 값은 총 2개입니다.

중복 레코드 개수를 계산하는 쿼리

이제 아래 쿼리를 사용하면 stock_item 테이블의 quantity 열에 있는 총 중복 레코드 개수를 구할 수 있습니다.

mysql> Select count(*) AS Total_duplicate_count
    -> FROM (SELECT item_name FROM stock_item
    -> GROUP BY quantity HAVING COUNT(quantity) > 1) AS X;
+-----------------------+
| Total_duplicate_count |
+-----------------------+
|                     2 |
+-----------------------+
1 row in set (0.00 sec)

결과를 보면 Total_duplicate_count가 2로 출력되었는데, 이는 중복된 수량 값이 40과 29 두 개임을 의미합니다.

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1단계 – 내부(서브) 쿼리: quantity 값을 기준으로 행들을 그룹화(GROUP BY)한 후, HAVING 절에서 COUNT(quantity) > 1 조건을 적용해 두 번 이상 등장하는 값만 남깁니다. 이 예제에서는 40과 29에 해당하는 그룹만 선택됩니다.

2단계 – 외부 쿼리: 서브쿼리 결과에 별칭 X를 지정하고, COUNT(*)를 사용해 해당 그룹의 개수를 집계합니다. 그 결과 중복 값의 총 개수인 2가 반환됩니다.

이처럼 서브쿼리와 집계 함수를 조합하면, 테이블 전체가 아닌 특정 열 기준으로 중복 데이터를 정확하게 파악할 수 있습니다. 데이터 정합성 검사나 중복 데이터 정리 작업을 진행하기 전에 활용하기 좋은 유용한 기법입니다.