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

MySQL 테이블의 중복 레코드 개수 확인 방법 – IF() 함수 활용 가이드

MySQL IF() 함수로 중복 레코드 집계하기

MySQL에서는 IF() 함수를 활용하면 테이블에 저장된 데이터 중 중복된 레코드가 몇 번 반복되는지 손쉽게 확인할 수 있습니다. COUNT() 함수와 GROUP BY 절을 함께 사용하면 각 값별로 등장 횟수를 집계하고, 그 결과가 1보다 큰 경우 '중복 레코드'로 판별할 수 있습니다.

기본 문법

SELECT yourColumnName, COUNT(*) AS anyVariableName, IF (
    COUNT(*)>1,"Duplicate Records", "Not Duplicate records") as anyVariableName FROM yourTableName group by yourColumnName;

위 문법에서 COUNT(*)는 각 그룹(열 값)별 레코드 수를 세고, IF() 함수는 그 개수가 1보다 크면 'Duplicate Records', 그렇지 않으면 'Not Duplicate records'를 반환합니다.

예제 테이블 생성

실습을 위해 먼저 테이블을 생성해 보겠습니다. 아래 쿼리로 DuplicateRecords 테이블을 만듭니다.

mysql> create table DuplicateRecords
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(30),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.82 sec)

샘플 데이터 삽입

INSERT 명령으로 몇 개의 레코드를 입력합니다. 의도적으로 같은 이름을 여러 번 넣어 중복 데이터를 만들었습니다.

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.81 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DuplicateRecords(Name) values('Mike');
Query OK, 1 row affected (0.14 sec)

전체 레코드 조회

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

mysql> select *from DuplicateRecords;

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

+----+-------+
| Id | Name  |
+----+-------+
| 1 | Carol  |
| 2 | John   |
| 3 | Sam    |
| 4 | John   |
| 5 | Sam    |
| 6 | Sam    |
| 7 | John   |
| 8 | Carol  |
| 9 | Carol  |
| 10 | Mike  |
+----+-------+
10 rows in set (0.00 sec)

중복 레코드 집계 쿼리 실행

이제 이름(Name)별로 중복 횟수를 계산하는 쿼리를 실행해 보겠습니다.

mysql> SELECT Name, COUNT(*) AS Repetition, IF (COUNT(*)>1,"Duplicate Records", "Not Duplicate records") as IsDuplicateRecordsOrNot
    -> from DuplicateRecords group by Name;

결과는 다음과 같습니다.

+-------+------------+-------------------------+
| Name  | Repetition | IsDuplicateRecordsOrNot |
+-------+------------+-------------------------+
| Carol |          3 | Duplicate Records       |
| John  |          3 | Duplicate Records       |
| Sam   |          3 | Duplicate Records       |
| Mike  |          1 | Not Duplicate records   |
+-------+------------+-------------------------+
4 rows in set (0.00 sec)

결과 해석

위 출력 결과를 보면 Carol, John, Sam은 각각 3번씩 반복되어 'Duplicate Records'로 표시되었고, 한 번만 등장한 Mike는 'Not Duplicate records'로 표시되었습니다. 이처럼 IF() 함수와 GROUP BY를 조합하면 별도의 복잡한 서브쿼리 없이도 중복 데이터를 직관적으로 판별하고 집계할 수 있습니다.