[sql] A컬럼으로 정렬하면서 B컬럼으로만 중복제거 하기

HI·2024년 9월 24일
post-thumbnail

이런 데이터를 가지는 TAB 테이블에서

A컬럼을 중복제거하고 B컬럼으로 오름차순 정렬한 결과를 받고 싶다.

SELECT DISTINCT A FROM TAB ORDER BY B ASC 

로 하면 ORDER BY절에 사용된 B를 SELECT에 포함하라는 에러 메세지가 나온다.
하지만 B를 SELECT절에 넣으면 distinct는 한 열을 기준으로 중복제거를 하기 때문에
'IMA 1'과 'IMA 2'는 중복제거 되지 않는다.

이런 경우 ROW_NUMBER PARTITION BY 를 사용할 수 있다.

WITH TMPA AS (
SELECT 
	A,B,
	ROW_NUMBER() OVER (PARTITION BY A ORDER BY B) AS rn
FROM TAB
)
SELECT  A,B
FROM TMPA
WHERE rn = 1     
ORDER BY B ASC

이렇게 rn컬럼을 추가한 TMPA테이블을 만들고 이 테이블에서 원하는 결과를 도출한다.

TMPA테이블의 모습은 이렇게 된다.

rn=1인 경우만 유니크한 A값들만 모여있다. 그래서 WHERE rn=1으로 DISTINCT된 모습을 볼 수 있다.

0개의 댓글