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

MySQL에서 중복 튜플을 찾고 개수를 표시하는 쿼리 방법

MySQL에서 중복된 튜플(레코드)을 찾고 그 개수까지 함께 확인하려면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. GROUP BY로 데이터를 그룹화한 뒤, HAVING 조건으로 특정 개수 이상 중복된 그룹만 필터링하는 방식입니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> Id int,
-> Name varchar(20)
-> );
Query OK, 0 rows affected (0.80 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 입력합니다. 일부러 동일한 (Id, Name) 조합을 여러 번 넣어 중복 데이터를 만들어 두었습니다.

mysql> insert into DemoTable values(100,'Chris');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values(101,'David');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable values(101,'Mike');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(100,'Carol');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values(100,'Chris');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values(100,'Chris');
Query OK, 1 row affected (0.10 sec)

3. 전체 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable;

실행 결과는 다음과 같습니다.

+------+-------+
| Id | Name |
+------+-------+
| 100 | Chris |
| 101 | David |
| 101 | Mike |
| 100 | Carol |
| 100 | Chris |
| 100 | Chris |
+------+-------+
6 rows in set (0.00 sec)

위 결과를 보면 (100, 'Chris') 조합이 총 3번 등록되어 있는 것을 확인할 수 있습니다.

4. 중복 튜플 찾기 쿼리

이제 GROUP BY와 HAVING 절을 사용해 중복 튜플과 그 개수를 조회하는 쿼리입니다.

mysql> select Id,Name,count(*) as t from DemoTable
-> group by Id,Name
-> having count(*) > 2;

실행 결과는 다음과 같습니다.

+------+-------+---+
| Id | Name | t |
+------+-------+---+
| 100 | Chris | 3 |
+------+-------+---+
1 row in set (0.03 sec)

쿼리 설명

group by Id,Name은 Id와 Name 컬럼의 조합을 기준으로 레코드를 그룹화합니다. 이후 having count(*) > 2 조건을 통해 동일한 조합이 2개보다 많이, 즉 3개 이상 존재하는 그룹만 결과로 반환됩니다. 별칭(alias)인 t는 각 그룹의 중복 개수를 나타냅니다.

만약 2개 이상 중복된 모든 경우를 찾고 싶다면 조건을 having count(*) > 1로 변경하면 됩니다.