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

MySQL에서 두 번 이상 존재하는 값만 조회하는 방법 – GROUP BY HAVING과 COUNT(*) 활용

MySQL에서 특정 값이 테이블에 두 번 이상 중복되어 존재하는 경우만 조회하고 싶다면, GROUP BY 절과 HAVING 절을 COUNT(*) 함수와 함께 사용하면 됩니다.

HAVING은 집계 함수의 결과를 필터링할 때 사용하는 절로, 일반적인 조건을 걸 때 쓰는 WHERE와 달리 그룹화된 결과에 조건을 적용할 수 있다는 점이 핵심입니다.

1. 예제 테이블 생성하기

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

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

2. 데이터 삽입하기

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

mysql> insert into DemoTable values(20);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(10);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values(30);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(40);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values(50);
Query OK, 1 row affected (0.27 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable;

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

+-------+
| Value |
+-------+
| 20 |
| 10 |
| 30 |
| 10 |
| 30 |
| 40 |
| 50 |
+-------+
7 rows in set (0.00 sec)

위 결과를 보면 값 1030이 각각 두 번씩 존재하는 것을 확인할 수 있습니다.

4. 두 번 이상 존재하는 값만 조회하는 쿼리

값이 두 번 이상 존재하는 레코드만 선택하려면 아래와 같이 GROUP BYHAVING COUNT(*) > 1 조건을 함께 사용합니다.

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

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

+-------+
| Value |
+-------+
| 10 |
| 30 |
+-------+
2 rows in set (0.38 sec)

정리

  • GROUP BY Value: 동일한 값을 가진 행들을 하나의 그룹으로 묶습니다.
  • HAVING COUNT(*) > 1: 각 그룹의 행 개수가 2개 이상인 경우, 즉 중복된 값만 필터링합니다.

이처럼 GROUP BY + HAVING + COUNT(*) 조합을 활용하면 중복 데이터를 손쉽게 찾아낼 수 있습니다. 참고로 세 번 이상 존재하는 값을 찾고 싶다면 조건을 COUNT(*) > 2로 변경하면 되며, 정확히 N번 존재하는 값을 찾으려면 COUNT(*) = N 형태로 작성하면 됩니다.