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

MySQL에서 중복 값이 있는 열에서 한 번만 나타나는 값만 조회하는 방법

데이터베이스 작업을 하다 보면 열에 중복된 값과 고유한 값이 섞여 있을 때, 딱 한 번만 등장하는 값만 추출해야 하는 경우가 있습니다. MySQL에서는 GROUP BY 절과 HAVING 절에 집계 함수를 조합하면 이 문제를 간단하게 해결할 수 있습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable723 (Value int);
Query OK, 0 rows affected (0.58 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 중복 값을 포함한 여러 레코드를 삽입합니다.

mysql> insert into DemoTable723 values(100);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(100);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable723 values(300);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(600);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.17 sec)

3. 전체 데이터 확인하기

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

mysql> select *from DemoTable723;

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

+-------+
| Value |
+-------+
| 100   |
| 200   |
| 200   |
| 100   |
| 300   |
| 400   |
| 400   |
| 600   |
| 400   |
| 200   |
+-------+
10 rows in set (0.00 sec)

위 결과를 보면 100은 2번, 200은 3번, 400은 3번 등장하고, 300과 600만 정확히 한 번 나타납니다.

4. 한 번만 존재하는 값 조회하기

중복 값과 고유 값이 섞인 열에서 단 한 번만 존재하는 값만 선택하려면 아래와 같이 GROUP BY로 값을 그룹화한 뒤, HAVING count(Value)=1 조건으로 개수가 1인 그룹만 필터링하면 됩니다.

mysql> select *from DemoTable723 group by Value having count(Value)=1;

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

+-------+
| Value |
+-------+
| 300   |
| 600   |
+-------+
2 rows in set (0.00 sec)

핵심 정리

이 쿼리의 동작 원리는 다음과 같습니다.

  • GROUP BY Value: 동일한 값을 가진 행들을 하나의 그룹으로 묶습니다.
  • count(Value): 각 그룹에 해당하는 값이 몇 번 등장했는지 계산합니다.
  • HAVING count(Value)=1: 등장 횟수가 정확히 1회인 그룹, 즉 중복되지 않고 한 번만 존재하는 값만 최종 결과에 남깁니다.

WHERE 절은 그룹화 이전에 개별 행에 적용되기 때문에 집계 결과를 필터링할 수 없으며, 반드시 HAVING 절을 사용해야 한다는 점을 기억하세요. 이 패턴은 중복 데이터 분석, 고유 항목 추출 등 실무에서 매우 자주 활용됩니다.