DB

[MySQL] SELECT DISTINCT – 중복된 데이터 없이 깔끔하게 조회하는 법

인생아 2025. 6. 25. 12:37
반응형

웹이나 앱에서 데이터를 조회할 때, 동일한 값이 반복되어 표시되는 경우가 많다.
이럴 때 중복을 제거하고 고유한 값만 가져오는 방법이 바로 SELECT DISTINCT이다.
MySQL에서 DISTINCT는 중복 제거를 위한 강력한 키워드이며,
정확한 사용법을 알고 있으면 효율적인 데이터 조회가 가능하다.

📌 SELECT DISTINCT 기본 문법

가장 단순한 사용 예는 다음과 같다.

SELECT DISTINCT 컬럼명 FROM 테이블명;

예제:

SELECT DISTINCT city FROM customers;
  • customers 테이블에서 city 값이 중복되지 않게 한 번씩만 조회됨

이는 지역 목록 드롭다운을 만들거나,
카테고리별 대표값을 가져올 때 매우 유용하게 사용된다.

반응형

🧪 실전 예제 1 – 이메일 도메인 목록 추출

SELECT DISTINCT SUBSTRING_INDEX(email, '@', -1) AS domain
FROM users;
  • @ 뒤의 도메인만 뽑아서 고유한 이메일 제공자 리스트를 조회할 수 있다

🧪 실전 예제 2 – 성별 종류 가져오기

SELECT DISTINCT gender FROM members;
  • 데이터에 'M', 'F', 'M', 'F', 'M'이 있어도 결과는 'M', 'F'만 반환됨
반응형

다중 컬럼에서의 DISTINCT

SELECT DISTINCT department, position
FROM employees;
  • department + position의 조합이 완전히 같은 경우만 중복으로 간주하여 제거한다

주의: DISTINCT department, position은 department만 기준으로 제거하는 것이 아니라,
두 컬럼의 조합이 동일해야 중복 처리된다

⚠️ DISTINCT vs GROUP BY 차이점

구분 SELECT DISTINCT GROUP BY
목적 중복 제거 그룹화 및 집계
결과 고유한 행만 표시 그룹별 결과 + 집계 함수 사용
예제 SELECT DISTINCT name FROM users SELECT name, COUNT(*) FROM users GROUP BY name
 

GROUP BY는 집계 함수(SUM, COUNT 등)와 함께 주로 사용되며,
DISTINCT는 단순히 고유한 행을 필터링할 때 사용된다.

📊 DISTINCT + COUNT 조합

중복을 제거한 값의 개수를 알고 싶다면 아래처럼 사용한다.

SELECT COUNT(DISTINCT category_id) FROM products;
  • 제품 테이블에서 고유한 카테고리 개수를 반환함

🚀 DISTINCT + ORDER BY 조합 예제

SELECT DISTINCT department
FROM employees
ORDER BY department ASC;
  • 중복을 제거한 후 정렬해서 가독성을 높일 수 있음

📎 공식 문서 참고

MySQL SELECT DISTINCT 공식 가이드
https://dev.mysql.com/doc/refman/8.0/en/select.html

반응형