Oracle(12c 이상)에서 보험료 상위 4~6위 계약을 조회하려 한… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
Oracle(12c 이상)에서 보험료 상위 4~6위 계약을 조회하려 한다. 보험료에 NULL 과 동점이 없을 때, 실행은 되지만 결과가 항상 0행인 SQL 은?㉠
SELECT 계약번호, 보험료 FROM (SELECT ROWNUM AS RN, T.* FROM (SELECT * FROM 계약 ORDER BY 보험료 DESC) T WHERE ROWNUM <= 6) WHERE RN >= 4;㉡
SELECT 계약번호, 보험료 FROM (SELECT * FROM 계약 ORDER BY 보험료 DESC) WHERE ROWNUM BETWEEN 4 AND 6;㉢
SELECT 계약번호, 보험료 FROM 계약 ORDER BY 보험료 DESC OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY;㉣
SELECT 계약번호, 보험료 FROM (SELECT 계약번호, 보험료, ROW_NUMBER() OVER (ORDER BY 보험료 DESC) AS RN FROM 계약) WHERE RN BETWEEN 4 AND 6;
1
㉣
2
㉡
3
㉢
4
㉠
해설
ROWNUM 은 행을 꺼낼 때 1부터 차례로 붙으므로, 첫 행이 ROWNUM 4 이상 조건에서 탈락하면 다음 행도 다시 1을 받아 계속 탈락해
ROWNUM BETWEEN 4 AND 6은 항상 0행이다.4~6위를 얻으려면 ROWNUM 을 인라인 뷰 안에서 별칭(RN)으로 고정한 뒤 바깥에서 비교해야 한다.
- 정렬한 인라인 뷰에서 ROWNUM 을 RN 으로 고정한 뒤 RN >= 4 로 거르면 4~6위가 나온다.
- OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY 는 앞 3행을 건너뛰고 다음 3행을 가져온다.
- ROW_NUMBER 로 매긴 RN 을 바깥에서 비교하면 4~6위가 정확히 나온다.
오류나 개정된 내용이 보이면 알려주세요
이어서 풀어보기
[SQLD] SQL 개발자 기출유형 모의고사 10회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요비슷한 기출
- sql문에서괄호안에알맞은답안을작성하시오. ('이름'이란컬럼에'이'로시작하는문자열을'내림차순'하는쿼리결과내용입니다.) select....from...where이름l2021년 정보처리기사실기 2회차
- 다음sql결과에알맞는쿼리을작성하시오. selectname,scorefrom성적(1)by(2)(3) 1.order 2.score 3.desc2022년 정보처리기사실기 1회차
- 다음sql결과에알맞는답을작성하시오. [table] selectcount(col2) fromtable wherecol1in(2,3)orcol2in(3,5); 42022년 정보처리기사실기 2회차