distinct 정리
Distinct란?
- PostgreSQL에서 DISTINCT를 사용하면 결과 집합에서 중복된 값을 제거할 수 있다.
- 이를 통해 데이터를 정리하고 고유한 값만을 포함하는 결과를 얻을 수 있다.
사용방법
SELECT DISTINCT job_title
FROM employee;
장점:
- 중복된 결과를 제거하여 데이터의 정확성을 유지한다.
- 간단하고 직관적인 방법으로 중복을 처리할 수 있다.
- 데이터의 품질을 향상시키고 분석의 정확성을 높인다.
단점:
- 대량의 데이터에 대해 DISTINCT를 사용하면 성능이 저하될 수 있다.
- 데이터베이스는 모든 결과를 비교하여 중복을 제거해야 하므로 처리 시간이 증가할 수 있다.
- 중복된 행을 제거하고 남은 결과가 예상과 다를 수 있다.
- 이는 DISTINCT가 결과를 단순히 중복을 제거하는 것으로 처리하기 때문에 발생할 수 있다.
주의사항
- DISTINCT는 결과 집합에서 중복된 행을 제거한다.
- 따라서 결과가 더 적을 수 있다.
- DISTINCT는 여러 열에 적용할 수 있다.
- 그러나 이 경우 각 조합의 고유성을 기준으로 중복을 제거한다.
UNION
- UNION 연산자는 두 개 이상의 SELECT 문의 결과를 결합하고 중복된 행을 제거한다.
- 이 때 중복된 행을 제거하기 위해 각 SELECT 문에서 DISTINCT를 사용할 수도 있습니다.
문법
select_statement UNION [ ALL | DISTINCT ] select_statement
사용방법
SELECT column1 FROM table1
UNION
SELECT column1 FROM table2;
- 위의 쿼리는 table1과 table2에서 중복된 값을 제거하고 column1의 값을 결합한다.
INTERSECT
- INTERSECT 연산자는 두 개 이상의 SELECT 문의 결과에서 교차되는 행을 반환한다.
- 중복된 값을 자동으로 제거한다.
문법
select_statement EXCEPT [ ALL | DISTINCT ] select_statement
사용방법
SELECT column1 FROM table1
INTERSECT
SELECT column1 FROM table2;
- 위의 쿼리는 table1과 table2에서 중복된 값을 제거하고 교차되는 column1의 값을 반환한다.
EXCEPT
- EXCEPT 연산자는 첫 번째 SELECT 문의 결과에서 두 번째 SELECT 문의 결과를 제거한다.
- 중복된 값을 자동으로 제거한다.
문법
select_statement UNION [ ALL | DISTINCT ] select_statement
사용방법
SELECT column1 FROM table1
EXCEPT
SELECT column1 FROM table2;
- 위의 쿼리는 table1에서 table2의 결과를 제거하고 남은 column1의 값을 반환한다.
글을 쓰게 된 이유
- 문제 개요
- 문제 현상 : 특정 컬럼의 값이 분리가 되어야 하는 상황
- 이미 시도한 해결 방법
- group by 와 서브쿼리로 합쳐진 기존 쿼리를 살린 상태에서 추가적으로
- 내가 원하는 컬럼을 group by에 추가하고 결과 서브쿼리 쪽을
- 다시 한번 더 서브쿼리로 감싸서 해결했다.
- group by 와 서브쿼리로 합쳐진 기존 쿼리를 살린 상태에서 추가적으로
해결한 방법
- group by 와 서브쿼리로 합쳐진 기존 쿼리를 살린 상태에서 내가 원하는 컬럼을 group by에 추가하고
- DISTINCT를 제거해서 해결했다.
느낀점
- DISTINCT를 살려야한다는 생각을 왜 했는지 2~3시간 동안 고민을 하다가 너무 복잡하게 쿼리를 짠 것
- 같아서 다시 고민을 해보니 DISTINCT만 없애면 되는 상황이어서 제거하여 해결했다.
- 그리고 DISTINCT에 대해 잘 모르는 것 같아서 글을 작성하기로 생각했고, 오늘 작성했다..
출처
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.