SQL

[ SQL ] 중복 제거하고 조회하기

Jerry_JH 2022. 1. 31. 16:17
728x90

중복을 제거하고 조회(SELETE)하는 방법은 다양하다.

 

그 중에서 알고 있는 3가지 방법에 대해서 적어볼려고 한다.

 

사용한 DBMS : ORACLE 

SQL 클라이언트 : DBeaver


빠른 이해를 위해 EMPLOYEE_TEST 테이블의 중복된 데이터를 넣었다.

 

 


1. DISTINCT 

- 이 방법이 제일 간단하고 자주 사용하는 명령어이다.

 

[명령어]

SELECT DISTINCT [중복제거할 컬럼]
FROM [TABLE_NAME];

 

[단일행]

 

[다중행]

다중행 방법으로 * 사용도 가능하다

* 은 모든행에서 중복을 제거하고 보여주는 방법이다.

CREATE_DT가 1초 차이가 나서 같지 않다고 판단하여 3개의 행이 조회되었다.

 


2. GROUP BY 이용

- 동일한 값을 그룹화하면서, 이 방법 또한 유니크한 값만 볼 수 있다.

- 주의할 점은 GROUP BY 에서 그룹화한 컬럼은 꼭 SELECT의 컬럼과 같아야 조회가 가능하다.

SELECT [중복제거할 컬럼]
FROM [TABLE_NAME]
GROUP BY [중복제거할 컬럼];

 

[단일행]

[다중행]

 

모든 열을 조회하고 싶다면 GROUP BY의 모든 열을 적어야 가능하다.

(GROUP BY와 SELECT 컬럼을 같아야하기 때문에)


3. ROW_NUMBER 이용

- PARTITION BY 가 GROUP 역할을 하고 RN =1 을 이용하여 중복값을 제거한다. 

- ORDER BY에서 컬럼은 정렬한 상태에서 랭크를 정하게 되는데 자세한 내용은 ROW_NUMBER을 이해해야 한다.

SELECT [조회할 컬럼]
FROM ( SELECT A.*,ROW_NUMBER() OVER(PARTITION BY [중복제거할 컬럼] ORDER BY[컬럼]) RN 
		FROM [TABLE_NAME] A)
WHERE RN=1 ;

 

[단일행]

 

[다중행]

- ORDER BY 컬럼을 CREATE_DT 컬럼 DESC(내림차순)으로 하여 제일 늦게 생성된 행을 조회한 모습이다.

- 이 방법은 거의 사용하지 않았지만 ROW_NUMBER() 함수를 알아두면 좋다.

 


이렇게 설명한 3가지 방법말고도 중복을 제거하고 조회하는 방법은 정말 다양하므로 꼭 이렇게 할 필요는 없다.

 

728x90