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

MySQL에서 두 번 이상 나타나는 값 찾는 방법 - GROUP BY와 HAVING 절 활용하기

데이터베이스 작업을 하다 보면 테이블 내에서 중복된 값을 찾아야 하는 경우가 자주 발생합니다. 이 글에서는 MySQL의 GROUP BY 절과 HAVING 절을 활용하여 두 번 이상 나타나는(중복되는) 값을 손쉽게 조회하는 방법을 알아보겠습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성합니다. value라는 이름의 int 타입 컬럼 하나만 가진 간단한 테이블입니다.

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)

결과를 보면 총 7개의 레코드가 있으며, 그중 1020은 각각 두 번씩 나타나는 것을 확인할 수 있습니다.

4. 두 번 이상 나타나는 값 조회하기

중복 값을 찾는 핵심 쿼리는 다음과 같습니다.

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

실행 결과는 아래와 같습니다.

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

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 단계별로 살펴보겠습니다.

  • GROUP BY value: value 컬럼의 값이 같은 레코드들을 하나의 그룹으로 묶습니다.
  • COUNT(*): 각 그룹에 속한 레코드의 개수를 계산합니다.
  • HAVING count(*) > 1: 집계 함수의 결과를 필터링합니다. WHERE 절은 집계 함수를 사용할 수 없기 때문에, 그룹화된 결과에 조건을 적용하려면 반드시 HAVING 절을 사용해야 합니다.

따라서 레코드 수가 2개 이상인 그룹, 즉 두 번 이상 나타나는 값만 최종 결과로 반환됩니다.

마무리

MySQL에서 중복 값을 찾는 방법은 매우 간단합니다. GROUP BY로 값을 그룹화한 뒤, HAVING COUNT(*) > 1 조건을 추가하면 됩니다. 이 패턴은 특정 컬럼의 중복 데이터를 검사하거나 데이터 정합성을 확인할 때 실무에서 널리 활용되므로 꼭 기억해 두시기 바랍니다.