ROW_NUMBER() OVER 문의 0 2 460

by 레드콘 [SQL Query] [2020.07.31 06:54:04]


SELECT ROW_NUMBER() OVER (ORDER BY TIME) SEQ
FROM ACCESSTIME                  
WHERE ROWNUM <= '20'
ORDER BY SEQ;

ACCESSTIME Table에 데이터 조회시 30row 데이터가 조회 됩니다.

근데 rownum 으로 time 기준으로 20개의 데이터만 가져올려고 합니다.

위 쿼리 기준으로는 time 정렬이 정확하게 되지 않은 20개의 row 데이터를 가지고 오는데

Table 데이터는 30 Row고 rownum < 40 더 높게 주면  SORT가 정확하게된 기준으로 rownum 순으로 가지고 업니다.

SELECT
(
SELECT ROWNUM, USRID
FROM ACCESSTIME  
ORDER BY TIME
)     
WHERE ROWNUM < '20';

이렇게 기준으로 하면 정확하게 가져 옵니다.

ROW_NUMBER() OVER 저렇게 쓰면 안되는건가요?

 

 

 

by 마농 [2020.07.31 07:59:17]

where 절이 order by 절보다 먼저 수행됩니다.
정렬부터 하고 rownum 해야 하는데
rownum 부터 하니 원하는 자료가 안나오는 것입니다.
 

-- 1. ROWNUM 사용법
SELECT ROWNUM rn
     , usrid
     , time
  FROM (SELECT usrid
             , time
          FROM accesstime
         ORDER BY time
        )
 WHERE ROWNUM <= 20
;
-- 2. ROW_NUMBER 사용법
SELECT *
  FROM (SELECT ROW_NUMBER() OVER(ORDER BY time) rn
             , usrid
             , time
          FROM accesstime
        )
 WHERE rn <= 20
;

 


by 레드콘 [2020.07.31 09:13:23]

감사합니다^^

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