이것 참... 너무 질문을 많이하는 게 부끄러워서 스스로 해보려고 노력하는데 막히는 부분에서는 너무 막히네요....
SELECT SURVEY_CNT,ROW_NUMBER() OVER (ORDER BY SURVEY_CNT DESC) AS RANK FROM survey
select * from survey where rownum = 1
위 두개의 쿼리문을 어떻게 조합할 수 있을까요...?
귀찮으실텐데 ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
---- 수정 ----
select * from (select SURVEY_CNT, ROW_NUMBER() OVER (ORDER BY SURVEY_CNT DESC) AS RANK FROM survey) where rownum = 2;
rownum = 1을 했을 때는 데이터가 뽑히는데 2로 하면 데이터가 안뽑히네요...
기존 질문의 답변에 이미 해답이 있는데요? http://gurubee.net/article/84700
rownum 을 이용할게 아니라 row_number() 에 대한 알리아스를 이용해 조건을 주시면 됩니다.
다만, Rank 와 같은 시스템 예약어를 별칭으로 사용하는 것은 좋지 않습니다.
SELECT * FROM (SELECT survey_cnt , ROW_NUMBER() OVER(ORDER BY survey_cnt DESC) rn FROM survey ) WHERE rn = 2 ;
그리고 survey_cnt 는 동순위가 나올 수 있는 값입니다.
동순위 처리에 대한 고민을 해보셨는지요?
2등이 2명일 경우 둘 다 나와야 할지 우선적으로 선택할 추가 기준이 있는지? 등
-- 정렬기준 등록일자 추가 -- SELECT * FROM (SELECT survey_cnt , ROW_NUMBER() OVER(ORDER BY survey_cnt DESC, survey_regdate) rn FROM survey ) WHERE rn = 2 ; -- 등록일자도 중복 가능할 것 같은데요? 유일키인 id 를 추가하세요. SELECT * FROM (SELECT survey_cnt , ROW_NUMBER() OVER(ORDER BY survey_cnt DESC, survey_regdate, survey_id) rn FROM survey ) WHERE rn = 2 ;
SQL 기초부터 다지셔야 할 것 같습니다.
http://gurubee.net/oracle/sql
SELECT survey_id , question_type , survey_title , user_name , survey_cnt , survey_regdate , survey_enddate , survey_isopen , ROW_NUMBER() OVER(ORDER BY survey_cnt DESC, survey_regdate, survey_id) rn FROM survey ;