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

MySQL에서 중복 값 표시를 피하는 쿼리 작성 방법

MySQL에서 중복된 값을 제외하고 고유한 값만 조회하려면 GROUP BY 절과 COUNT 함수를 함께 사용하면 됩니다. COUNT 결과가 1인 그룹, 즉 테이블 내에서 단 한 번만 나타나는 값만 필터링하는 방식입니다. 기본 문법은 다음과 같습니다.

select yourColumnName from yourTableName group by yourColumnName having count(*)=1;

1. 예제 테이블 생성

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

mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Subject varchar(100)
-> );
Query OK, 0 rows affected (0.70 sec)

2. 데이터 삽입

INSERT 명령으로 여러 개의 레코드를 추가합니다. 중복 확인을 위해 MongoDB, Java, C는 의도적으로 두 번씩 입력했습니다.

mysql> insert into DemoTable(Subject) values('MySQL');
Query OK, 1 row affected (0.21 sec)

mysql> insert into DemoTable(Subject) values('MongoDB');
Query OK, 1 row affected (0.14 sec)

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

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

mysql> insert into DemoTable(Subject) values('C');
Query OK, 1 row affected (0.13 sec)

mysql> insert into DemoTable(Subject) values('C++');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DemoTable(Subject) values('Java');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DemoTable(Subject) values('C');
Query OK, 1 row affected (0.23 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable;

출력 결과

+----+---------+
| Id | Subject |
+----+---------+
| 1 | MySQL |
| 2 | MongoDB |
| 3 | Java |
| 4 | MongoDB |
| 5 | C |
| 6 | C++ |
| 7 | Java |
| 8 | C |
+----+---------+
8 rows in set (0.00 sec)

4. 중복 값 제외 쿼리 실행

HAVING COUNT(*) = 1 조건을 적용하면 두 번 이상 등장하지 않는 값만 결과로 반환됩니다.

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

출력 결과

+---------+
| Subject |
+---------+
| MySQL |
| C++ |
+---------+
2 rows in set (0.00 sec)

실행 결과를 보면 MongoDB, Java, C는 각각 두 번씩 저장되어 있어 결과에서 제외되었고, 한 번만 등장한 MySQLC++만 출력된 것을 확인할 수 있습니다.

참고로, 중복을 제거한 전체 목록이 필요하다면 DISTINCT 키워드를 사용하고, 오직 한 번만 나타나는 값만 필요하다면 위 예제처럼 HAVING COUNT(*)=1 방식을 사용하는 것이 좋습니다. 두 방법의 목적이 다르므로 상황에 맞게 선택하시기 바랍니다.