정보처리기사/데이터베이스 활용

DISTINCT(중복 제거)

glorypang 2025. 10. 19. 23:34
728x90
반응형
SMALL

DISTINCT 한눈에 보기

  • 역할: `SELECT` 결과에서 동일한 행(열 조합)이 중복되면 1번만 남김.
  • 적용 범위: DISTINCT는 SELECT 리스트 전체 조합에 적용됩니다. (특정 열만 고유하게 만들고 싶다면, 그 열만 선택하거나 서브쿼리/윈도우/그룹화를 사용)
  • NULL 처리: NULL도 값의 한 종류로 간주되어 동일한 NULL 조합은 1번만 남습니다.
    COUNT(DISTINCT col)은 NULL을 세지 않습니다.

예시용 스키마

`orders(order_id, customer_id, product_id, status, ordered_at)`

1) 단일 열의 고유 값

-- 고유한 주문 상태 목록
SELECT DISTINCT status
FROM orders
ORDER BY status;
  • 결과: pending, shipped, delivered … (중복 제거)

2) 여러 열 조합을 고유하게

-- 고객-상품 조합(같은 고객이 같은 상품을 여러 번 샀어도 1행)
SELECT DISTINCT customer_id, product_id
FROM orders;

3) COUNT(DISTINCT)

-- 서로 다른 고객 수
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;

-- (DB별 지원 상이) 서로 다른 고객-상품 조합 수
-- PostgreSQL/MySQL: OK
SELECT COUNT(DISTINCT customer_id, product_id) AS unique_pairs
FROM orders;

-- SQL Server(다중 열 미지원) 대안
SELECT COUNT(DISTINCT CONCAT(customer_id, ':', product_id)) AS unique_pairs
FROM orders;

 

 

728x90
반응형
LIST