hanker

SQL - 데이터 중복 제거하기! (MySQL / MSSQL / Oracle / PostgreSQL) 본문

DATABASE/SQL

SQL - 데이터 중복 제거하기! (MySQL / MSSQL / Oracle / PostgreSQL)

hanker 2024. 12. 10. 00:00
반응형

SQL에서 데이터를 다룰 때, 중복된 데이터를 제거하는 것은 매우 중요한 작업이다.

이번 글에서는 MySQL, MSSQL, Oracle, PostgreSQL에서 중복을 제거하는 방법을 알아보자!

 


공통 (MySQL, MSSQL, Oracle, PostgreSQL)

 

DISTINCT는 SQL에서 중복된 데이터를 제거하는 가장 기본적인 방법이다.

SELECT DISTINCT department
FROM employees;

결과: 각 부서 이름이 한 번만 출력된다.

 

DISTINCT를 여러 열에 적용하면 열 전체를 기준으로 중복 여부를 판단

SELECT DISTINCT job_title, city
FROM employees;

결과: 동일한 직업-도시 조합은 한 번만 출력된다.


 

COUNT와 함께 사용

 

중복 제거된 값의 개수를 확인할 때 DISTINCTCOUNT와 함께 사용할 수 있다.

SELECT COUNT(DISTINCT department) AS unique_departments
FROM employees;

결과: 중복되지 않은 부서의 개수가 반환된다.

 

ORDER BY와 함께 사용

 

중복을 제거한 후 결과를 정렬하려면 ORDER BY를 사용한다.

SELECT DISTINCT name
FROM employees
ORDER BY name ASC;

결과: 이름 중복 제거 후 알파벳 순으로 정렬된다.

 


 

DISTINCT ON (PostgreSQL 전용)

 

PostgreSQL은 DISTINCT ON 구문을 사용하여 특정 열을 기준으로 중복을 제거하면서 첫 번째 행을 반환할 수 있다.

SELECT DISTINCT ON (department) department, name, salary
FROM employees
ORDER BY department, salary DESC;

설명: 각 부서별로 가장 높은 급여를 받는 직원만 반환된다.


 

DISTINCT vs GROUP BY

 

DISTINCTGROUP BY 모두 중복 제거를 할 수 있지만, GROUP BY는 집계 함수와 함께 사용될 때 더 유용하다.

 

DISTINCT로 중복 제거

SELECT DISTINCT department
FROM employees;

 

 

GROUP BY로 중복 제거

SELECT department
FROM employees
GROUP BY department;

차이점: GROUP BY는 집계 함수(COUNT, SUM, AVG 등)와 함께 데이터를 요약할 때 주로 사용된다.

 


DISTINCT와 성능
 

주의: DISTINCT는 대량의 데이터에서 성능에 영향을 줄 수 있다.

이 경우, 인덱스를 활용하거나 GROUP BY를 사용하여 최적화할 수 있다.


 

끝.

 

 

반응형