devnoong.log
728x90

 

Mysql에서는 WITH 구문 내부안에서 ORDER BY절을 이용하여 정렬을 할 수가 없습니다.

 

하지만, 임시테이블 내에서 정렬된 순서라든지 값이 필요한 경우가 존재하기때문에 ROW_NUMBER() 함수를 이용해 정렬에 사용합니다.

 

기본적으로 테이블 데이터들은 PK값이나 인덱스 값을 기준으로 오름차순 정렬되어 있는 경우가 많습니다.

그로인해 정렬을 지정안하고 WITH 구문절에서 데이터를 가지고 와도 오름차순 정렬되어 있는 경우가 존재하지만, 내림차순 정렬을 지정할 경우에는 아래와 같이 ROW_NUMBER 함수를 이용합니다.

 

ROW_NUMBER 이용하기

 

WITH TEMP_TABLE (
	SELECT COL1 , COL2 , ROWNUMBER() OVER(ORDER BY COL2) AS ROW_NUM  -- 순서 기준값 생성 
    FROM TABLE
)
SELECT *
FROM TEMP_TABLE
ORDER BY ROW_NUM DESC  -- 순서 기준값으로 정렬 수행

 

위의 쿼리를 수행하면 COL2를 기준으로 순서가 부여된 값인 ROW_NUM 값을 통해 내림차순 정렬이 가능합니다.

오름 차순으로 수행 하고 싶으면 ORDER BY ROW_NUM ASC로 수행하면 됩니다. 

728x90