DISTINCT

mskimdev·2026년 4월 18일

MySQL

목록 보기
19/20
post-thumbnail

DISTINCT

SELECT member_id FROM orders;
member_id
---------
        1
        1
        2
        1
        3
        2

같은 회원이 여러 번 주문하면 member_id가 중복으로 나온다. 여기서 "몇 명이 주문했는지"가 궁금한 거라면 중복을 없애야 한다. DISTINCT는 조회 결과에서 중복된 행을 제거한다.


기본 사용법

SELECT DISTINCT member_id FROM orders;
member_id
---------
        1
        2
        3

SELECT 바로 뒤에 DISTINCT를 붙이면 된다. 중복된 값은 한 번만 나온다.


여러 컬럼에 적용

DISTINCT는 컬럼 하나가 아니라 행 전체를 기준으로 중복을 판단한다.

SELECT DISTINCT member_id, product_id FROM order_items;
member_id | product_id
----------+-----------
        1 |        101
        1 |        102
        2 |        101

member_id가 같아도 product_id가 다르면 다른 행으로 취급한다. (1, 101)(1, 102)는 중복이 아니다.


COUNT와 함께 쓰기

중복을 제거한 개수를 셀 때 COUNT와 함께 쓴다.

-- 전체 주문 수
SELECT COUNT(*) FROM orders;          -- 6

-- 주문한 회원 수 (중복 제거)
SELECT COUNT(DISTINCT member_id) FROM orders;  -- 3

COUNT(*)는 행의 총 개수, COUNT(DISTINCT member_id)는 고유한 member_id의 개수다. 둘의 차이를 구분하는 게 중요하다.


DISTINCT vs GROUP BY

중복 제거만 필요하다면 DISTINCT가 간결하다. 그룹별로 집계까지 필요하다면 GROUP BY를 쓴다.

-- 주문한 적 있는 회원 목록 — 둘 다 결과 동일
SELECT DISTINCT member_id FROM orders;

SELECT member_id FROM orders GROUP BY member_id;

단순히 중복만 없앨 때는 DISTINCT, 집계 함수(COUNT, SUM 등)와 함께 쓸 때는 GROUP BY로 구분하면 된다.


DISTINCT는 기능 자체는 단순하다. 단, 데이터가 많을수록 중복 제거 비용이 커지기 때문에 꼭 필요한 상황에서만 쓰는 게 좋다.

profile
<- 개발 공부하는 나

0개의 댓글