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

MySQL로 중복 행을 찾고 별도 열에 반복 횟수 표시하기

MySQL에서 중복된 행을 찾고 각 행이 반복된 횟수를 별도의 열로 표시하려면 GROUP BY 절과 HAVING 절을 함께 사용하면 됩니다. GROUP BY는 동일한 값을 가진 데이터를 그룹으로 묶어주고, HAVING은 집계 함수의 결과에 조건을 적용해 반복 횟수가 일정 기준 이상인 그룹만 필터링합니다.

1. 테이블 생성

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

mysql> create table DemoTable(
    Name varchar(100),
    Age int
);
Query OK, 0 rows affected (1.50 sec)

2. 데이터 삽입

INSERT 명령을 사용하여 테이블에 여러 개의 레코드를 삽입합니다. 의도적으로 동일한 데이터를 중복해서 넣었습니다.

mysql> insert into DemoTable values('Chris',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',21);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',23);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris',21);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('Mike',25);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David',21);
Query OK, 1 row affected (0.10 sec)

3. 전체 데이터 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-------+------+
| Name  | Age  |
+-------+------+
| Chris | 23   |
| David | 21   |
| Chris | 23   |
| Chris | 21   |
| Mike  | 25   |
| David | 21   |
+-------+------+
6 rows in set (0.00 sec)

4. 중복 행 찾기 및 반복 횟수 표시

다음은 Name과 Age 기준으로 데이터를 그룹화한 뒤, 반복 횟수가 2회 이상인 행만 조회하고 그 개수를 'Repeated'라는 별도의 열에 표시하는 쿼리입니다.

mysql> select Name,Age,count(*) AS Repeated from DemoTable
group by Name,Age
having Repeated > 1;

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

+-------+------+----------+
| Name  | Age  | Repeated |
+-------+------+----------+
| Chris | 23   | 2        |
| David | 21   | 2        |
+-------+------+----------+
2 rows in set (0.00 sec)

결과를 보면 ('Chris', 23)과 ('David', 21) 조합이 각각 2번씩 반복되었음을 확인할 수 있습니다. 참고로 WHERE 절은 그룹화 이전에 조건을 적용하지만, HAVING 절은 COUNT(*) 같은 집계 결과에 조건을 걸 수 있으므로 중복 데이터 검색 시 반드시 HAVING을 사용해야 합니다.