[MSSQL] 중복 제거 방법 (DISTINCT)

SQL Server에서 중복된 행을 제거하고 한 번만 표시하고 싶다면 DISTINCT를 사용하면 된다. 중복 행을 제거하는 방법은 DISTINCT 사용하는 방법 외에도 GROUP BY 절을 사용해서 중복 행을 제거할 수 있다. GROUP BY를 사용하면 속도가 조금 빠르다는 얘기가 있으나 큰 차이를 느끼지 못했다.

 

GROUP BY를 사용해야 할 특별한 경우가 아니면 중복 행을 제거할 때는 DISTINCT를 사용할 것을 권장한다. DISTINCT를 사용해도 중복을 제거한 결과가 오름차순으로 정렬되어서 조회된다. (SQL Server 2019)

 

MSSQL DISTINCT

DISTINCT

DISTINCT를 사용하여 중복 제거

SELECT DISTINCT deptno, job
  FROM emp
 WHERE deptno in (20, 30)

 

 

중복 행이 제거되고 deptno, job 두 개의 컬럼이 오름차순으로 정렬되어 조회된다.

 

ORDER BY 절을 사용하여 정렬 변경

SELECT DISTINCT deptno, job
  FROM emp
 WHERE deptno in (20, 30)
 ORDER BY job

 

 

조회된 결과를 임의로 정렬을 변경하고 싶다면 ORDER BY 절을 사용하면 된다.

 

단, SELECT 절에 없는 컬럼으로 정렬을 할 수 없다. 중복된 행을 제거 시 사용된 컬럼 외에 다른 컬럼으로 정렬이 필요할 경우 GROUP BY 절을 사용해야 한다. (아래 참조)

 

GROUP BY

GROUP BY 절을 사용하여 중복 제거

SELECT deptno, job
  FROM emp
 WHERE deptno in (20, 30)
 GROUP BY deptno, job

 

 

GROUP BY 절을 사용해도 DISTINCT와 동일한 결과가 조회된다.

 

중복 제거 시 SELECT 절에 없는 컬럼으로 정렬

SELECT deptno, job, MAX(sal) AS sal
  FROM emp
 WHERE deptno in (20, 30)
 GROUP BY deptno, job
 ORDER BY sal

 

 

GROUP BY 절을 사용하여 중복 행을 제거할 경우 그룹 함수를 사용하여 최댓값(MAX) 또는 최솟값(MIN)을 추출하여 정렬을 변경할 수 있다. 그룹 함수를 사용했기 때문에 조회된 결과 건수는 동일하다.

 

 

댓글

Designed by JB FACTORY