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

MySQL에서 열의 중복 값 찾아 한 번만 표시하는 방법

MySQL에서 특정 열에 중복된 값이 있는지 확인하고, 각 중복 값을 한 번씩만 조회하는 방법을 알아보겠습니다. GROUP BY 절과 HAVING 절에 COUNT() 함수를 함께 사용하면 손쉽게 구현할 수 있습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
-> (
-> value int
-> );
Query OK, 0 rows affected (0.82 sec)

2. 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 삽입합니다. 이때 의도적으로 중복 값(10, 20)을 포함시킵니다.

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable values(100);
Query OK, 1 row affected (0.10 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.28 sec)

mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.34 sec)

mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.24 sec)

mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.07 sec)

3. 전체 레코드 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+-------+
| value |
+-------+
| 10 |
| 100 |
| 20 |
| 10 |
| 30 |
| 40 |
| 20 |
+-------+
7 rows in set (0.00 sec)

위 결과를 보면 값 1020이 각각 두 번씩 저장되어 있는 것을 확인할 수 있습니다.

4. 중복 값 찾기

중복된 값만 골라 한 번씩 표시하려면 아래 쿼리를 사용합니다. GROUP BY로 값을 그룹화한 뒤, HAVING COUNT(*) > 1 조건을 통해 두 번 이상 나타난 값만 필터링합니다.

mysql> select *from DemoTable group by value having count(*) > 1;

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

+-------+
| value |
+-------+
| 10 |
| 20 |
+-------+
2 rows in set (0.00 sec)

정리

GROUP BYHAVING COUNT(*) > 1 조합은 MySQL에서 중복 데이터를 찾는 가장 기본적이고 널리 사용되는 방법입니다. 만약 중복된 횟수까지 함께 확인하고 싶다면 SELECT value, COUNT(*) AS cnt FROM DemoTable GROUP BY value HAVING cnt > 1;처럼 카운트 결과를 함께 출력하면 됩니다. 또한 MySQL 8.0 이상에서는 ONLY_FULL_GROUP_BY 모드가 기본 활성화되어 있으므로, SELECT * 대신 그룹화 기준 컬럼인 value를 명시적으로 선택하는 것이 안전합니다.