DB/Oracle & tibero

DISTINCT와 GROUP BY의 차이

개발게발 2022. 5. 11. 23:57

DISTINCT와 GROUP BY는 공통적으로 중복된 값을 제거하는 방법이다.

WITH t AS (
  SELECT '과일' AS TYPE, '사과' AS NAME FROM dual
 UNION ALL
  SELECT '과일', '레몬' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '채소', '오이' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
)
SELECT TYPE, NAME FROM t;

 

TYPE NAME
과일 사과
과일 레몬
과일 사과
과일 사과
채소 오이
채소 당근
채소 당근

TYPE : 과일, NAME : 사과 => 중복

TYPE : 채소, NAME : 당근 => 중복

 

  • DISTINCT
WITH t AS (
  SELECT '과일' AS TYPE, '사과' AS NAME FROM dual
 UNION ALL
  SELECT '과일', '레몬' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '채소', '오이' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
)
SELECT DISTINCT TYPE, NAME FROM t;

 

  • GROUP BY
WITH t AS (
  SELECT '과일' AS TYPE, '사과' AS NAME FROM dual
 UNION ALL
  SELECT '과일', '레몬' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '과일', '사과' FROM dual
 UNION ALL
  SELECT '채소', '오이' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
 UNION ALL
  SELECT '채소', '당근' FROM dual
)
SELECT TYPE, NAME FROM t GROUP BY TYPE, NAME;

 

DISTINCT와 GROUP BY의 결과값은 동일하다.

TYPE NAME
과일 사과
채소 오이
채소 당근
과일 레몬

 


DISTINCT는 단순 그룹핑 작업만 수행

GROUP BY는 그룹핑 + 정렬작업을 같이 수행

 

출처 : https://gent.tistory.com/222

 

[Oracle] 데이터 중복 제거 방법 (DISTINCT, GROUP BY)

오라클에서 데이터 조회 시 데이터 중복을 제거하기 위해서는 대표적으로 2가지 방법이 있다. DISTINCT 키워드를 사용하여 중복을 제거하는 방법과, GROUP BY 절을 사용하여 데이터 중복을 제거하는

gent.tistory.com