메인 콘텐츠로 건너뛰기
SELECT DISTINCT를 지정하면 쿼리 결과에는 고유한 행만 남습니다. 즉, 결과에서 완전히 일치하는 행들의 각 집합마다 행 1개만 남습니다. 고유한 값을 가져야 하는 컬럼 목록을 지정할 수 있습니다: SELECT DISTINCT ON (column1, column2,...). 컬럼을 지정하지 않으면 모든 컬럼을 기준으로 판단합니다. 다음 테이블을 예로 살펴보겠습니다:
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
컬럼을 지정하지 않고 DISTINCT를 사용하는 경우:
SELECT DISTINCT * FROM t1;
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 1 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘
지정한 컬럼과 함께 DISTINCT 사용:
SELECT DISTINCT ON (a,b) * FROM t1;
┌─a─┬─b─┬─c─┐
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 2 │
│ 1 │ 2 │ 2 │
└───┴───┴───┘

DISTINCT와 ORDER BY

ClickHouse는 하나의 쿼리에서 서로 다른 컬럼에 DISTINCT 절과 ORDER BY 절을 함께 사용할 수 있습니다. DISTINCT 절은 ORDER BY 절보다 먼저 실행됩니다. 다음 테이블을 예로 살펴보겠습니다:
┌─a─┬─b─┐
│ 2 │ 1 │
│ 1 │ 2 │
│ 3 │ 3 │
│ 2 │ 4 │
└───┴───┘
데이터 조회:
SELECT DISTINCT a FROM t1 ORDER BY b ASC;
┌─a─┐
│ 2 │
│ 1 │
│ 3 │
└───┘
서로 다른 정렬 방향으로 데이터 선택하기:
SELECT DISTINCT a FROM t1 ORDER BY b DESC;
┌─a─┐
│ 3 │
│ 1 │
│ 2 │
└───┘
2, 4는 정렬 전에 잘려 나갔습니다. 쿼리를 작성할 때는 이러한 구현상의 특이사항을 고려하십시오.

NULL 처리

DISTINCTNULLNULL이 특정 값이며 NULL==NULL인 것처럼 취급합니다. 즉, DISTINCT 결과에서는 NULL을 포함한 서로 다른 조합도 한 번만 나타납니다. 이는 대부분의 다른 문맥에서의 NULL 처리 방식과 다릅니다.

대안

집계 함수를 사용하지 않고 SELECT 절에 지정된 것과 동일한 값 집합에 GROUP BY를 적용해도 동일한 결과를 얻을 수 있습니다. 다만 GROUP BY 방식과 비교하면 몇 가지 차이점이 있습니다.
  • DISTINCTGROUP BY와 함께 사용할 수 있습니다.
  • ORDER BY를 생략하고 LIMIT를 지정하면, 필요한 수의 서로 다른 행을 읽는 즉시 쿼리 실행이 중지됩니다.
  • 데이터 블록은 전체 쿼리 실행이 끝날 때까지 기다리지 않고 처리되는 대로 출력됩니다.
마지막 수정일 2026년 6월 10일