오라클 서브쿼리 ROWNUM ORDER BY 0 2 1,833

by 밍밍밍밍 [Oracle 기초] ROWNUM ORDER BY [2018.09.27 11:42:48]


 SELECT *   FROM(   SELECT     BANNER_NM,    LINK_URL,    BANNER_DC,    TARGET,   
  (SELECT NF.FILE_PATH || NF.FILE_NAME FROM FILE NF WHERE NF.FILE_KEY = BN.FILE_KEY and ROWNUM =1  ) IMG_SRC   FROM BANNER BN   WHERE 1 = 1     
       AND NO = '2' AND REFLCT_AT = 'Y'      ORDER BY FRST_REGIST_PNTTM DESC   )     WHERE ROWNUM <= 10     

 

안녕하세요.

쿼리실행시 서브쿼리부분이 에러가나서 ROWNUM = 1을 추가하였습니다.

추가 후 서브쿼리에 ORDER BY NF.FILE_ID DESC 절을 추가하면 문법에러가 납니다.

ORDER BY절을 어디쪽에 써야하는지 답변좀 부탁드립니다.

by 마농 [2018.09.27 13:27:22]

1. 스칼라 서브쿼리에 ORDER BY 절을 넣을 수 없습니다.
  - 정렬된 것중 1건을 가져오려면?
  - KEEP 을 이용하세요.
2. 스칼라서브쿼리의 실행 위치를 바꾸세요.
  - 서브쿼리 수행 횟수 감소로 성능이 개선됩니다.
  - 전체건수 ==> 1 페이지(10건)

SELECT banner_nm
     , link_url
     , banner_dc
     , target
     , (SELECT MAX(nf.file_path || nf.file_name)
               KEEP(DENSE_RANK FIRST ORDER BY nf.file_id DESC)
          FROM file nf
         WHERE nf.file_key = bn.file_key
        ) img_src
  FROM (SELECT banner_nm
             , link_url
             , banner_dc
             , target
             , file_key
          FROM banner bn
         WHERE 1 = 1
           AND no = '2'
           AND reflct_at = 'Y'
         ORDER BY frst_regist_pnttm DESC
        ) bn
 WHERE ROWNUM <= 10
;

 


by 밍밍밍밍 [2018.09.27 13:42:20]

답변 감사드립니다. KEEP은 처음 써보네요

서브쿼리도 수정했습니다.

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