페이지 쿼리 관련해서 질문 드립니다 0 2 645

by 오더바이 [SQL Query] [2019.06.26 17:44:23]


               SELECT
				drone_idx,
				ROW_NUMBER() OVER(ORDER BY drone_idx ASC) AS ROWNUM
					
				FROM 
					TB_DRONE_INFO
				WHERE 
					1=1
					
				ORDER BY	
					drone_idx DESC

rownum과 idx 두개의 컬럼 모두 내림차순으로 뽑고 싶어 over함수에서 order by와 select문 order by둘 다 desc를 했을 시 rownum은 오름차순으로 뽑히고 idx값만 내림차순으로 뽑힙니다.

over함수에서 asc를 했을땐 두 컬럼 모두 내림차순으로 뽑힙니다....이렇게 뽑히는 이유를 모르겠습니다... 이러한 현상에 대해 설명 좀 부탁드리겠습니다.

by jkson [2019.06.26 18:30:28]

제일 아래 전체 order by 부분은 말씀하신대로 desc를 쓰면 drone_idx의 역순으로 데이터가 조회됩니다.

row_number() over (order by drone_idx desc)

는 의미를 설명 드리면

'전체 데이터에서 drone_idx의 역순으로 sort했을 때 해당 row의 순번'이라는 의미입니다.

따라서 데이터가 drone_idx에 A, B, C가 있었다면 C가 1위가 되니 

C 1

B 2

A 3

이 결과로 나옵니다.


by 마농 [2019.06.26 18:59:50]

위와 같이 하면 정렬을 두번 하게 됩니다.
아래는 정렬 한번만 하게 하는 팁입니다.
그리고, 컬럼명으로 ROWNUM 과 같은 예약어 사용은 좋지 않습니다.
 

SELECT drone_idx
     , COUNT(*) OVER() + 1
     - ROW_NUMBER() OVER(ORDER BY drone_idx DESC) AS rn
  FROM tb_drone_info
 WHERE 1=1
 ORDER BY drone_idx DESC
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입