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

MySQL에서 3번 이상 반복되는 중복 값만 조회하는 방법

MySQL에서 특정 열의 값이 3번 이상 반복되는 경우에만 해당 데이터를 조회하고 싶다면, GROUP BY와 함께 HAVING COUNT() 절을 사용하면 됩니다. 이 글에서는 예제 테이블을 만들고 단계별로 중복 데이터를 필터링하는 방법을 살펴보겠습니다.

1. 예제 테이블 생성하기

먼저 학생 정보를 저장할 테이블을 생성합니다.

mysql> create table DemoTable1351
-> (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(40)
-> );
Query OK, 0 rows affected (1.08 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 여러 개의 레코드를 입력합니다. 일부 이름은 의도적으로 여러 번 반복해서 입력합니다.

mysql> insert into DemoTable1351(StudentName) values('Chris');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1351(StudentName) values('Bob');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1351(StudentName) values('Bob');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1351(StudentName) values('David');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1351(StudentName) values('Bob');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1351(StudentName) values('David');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1351(StudentName) values('Bob');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1351(StudentName) values('Mike');
Query OK, 1 row affected (0.68 sec)
mysql> insert into DemoTable1351(StudentName) values('David');
Query OK, 1 row affected (0.12 sec)

3. 전체 레코드 확인하기

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

mysql> select * from DemoTable1351;

위 쿼리는 다음과 같은 결과를 출력합니다.

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 1 | Chris |
| 2 | Bob |
| 3 | Bob |
| 4 | David |
| 5 | Bob |
| 6 | David |
| 7 | Bob |
| 8 | Mike |
| 9 | David |
+-----------+-------------+
9 rows in set (0.00 sec)

4. 3번 이상 나타나는 중복 값만 조회하기

이제 핵심 쿼리입니다. GROUP BY로 이름별로 그룹화한 뒤, HAVING COUNT() >= 3 조건을 적용하면 3번 이상 등장하는 이름만 걸러낼 수 있습니다.

mysql> select * from DemoTable1351
-> group by StudentName
-> having count(StudentName) >=3;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
| 2 | Bob |
| 4 | David |
+-----------+-------------+
2 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 'Bob'은 4번, 'David'는 3번 등장했기 때문에 두 이름만 조회되었습니다. 반면 한 번만 등장한 'Chris'와 'Mike'는 조건을 충족하지 못해 결과에서 제외된 것을 확인할 수 있습니다.

마무리

이처럼 HAVING COUNT() 절을 활용하면 WHERE 절로는 처리할 수 없는 그룹 단위의 집계 조건을 손쉽게 적용할 수 있습니다. 임계값(예: 3)을 원하는 숫자로 변경하면 2번 이상, 5번 이상 등 다양한 기준의 중복 데이터도 간단히 조회할 수 있습니다.