DB

[ORACLE] 구분 값과 정렬 컬럼이 다른 경우

ZZJJing 2023. 4. 12. 14:46

 

이번 프로젝트를 하면서 

게시글 형태이긴 하나 프레임 코드가 따로 있는 작업을 할 때 사용했던 쿼리이다! 

 

* 글마다 테마가 있어서 코드가 따로 있다.

* 그 글 중에서도 dp_cnt가 있어서 그 테마 중에 가장 dp_cnt가 높은 row로 1개씩만 가지고 와야한다. 

* 게시판은 Board 형태라고 치자 

 

예시 )  BOARD TB 컬럼명 

컬럼명 board_idx  title  content on_date use_yn dp_cnt thema_code
  101 제목1 내용1 20230101 Y 2 A
  100 제목2 내용2 20211201 Y 1 A
  202 제목3 내용3 20230401 Y 3 B
  303 제목4 내용4 20230411 Y 4 B
  333 제목5 내용5 20230212 Y 5 C

 

SELECT 
	AA.*
    , ROW_NUMBER() OVER (ORDER BY DP_CNT) RNUM 
FROM 
(
	SELECT 
    	ROW_NUMBER() OVER(PARTITION BY THEMA_CODE ORDER BY DP_CNT) RN 
        , BOARD_IDX 
        , TITLE 
        , CONT
        , ON_DATE
        , USE_YN
        , DP_CNT 
        , THEMA_CODE 
	FROM 
    	BOARD 
    WHERE 
    	USE_YN = 'Y'
    ORDER BY
    	DP_CNT 
)AA
WHERE 
	RN = 1

 

이런식으로 partition by 로 구분해주고 

원하는 컬럼으로 정렬한후 상단한게만 가져올 수 있었다!

상황에 맞게 응용해서 사용해보자