본문 바로가기
[DBMS]/- Oracle

[Oracle]TopN Queey 탑N쿼리

by Hapco 2022. 5. 30.
728x90
반응형

Top N query

-데이터를 원하느 개수만큼 끊어서 조회하는 구문 작성 방식

사례 : Top3 , top 100 ,페이지네이션(pagenation)

-rownum 이 필요 :결과집합의 데이터에 순서대로 부여되는 행번호(무조건 1부터 시작)

--product 테이블에 rownum을 추가하여 조회

--문제점 : 항목이 먼저 해석되기 떄문에 rownum 이 부여된 상태로 정렬이 되어 의미가 없어진다.

select rownum ,product.* from product;

select rownum ,product.* from product order by price asc;

--1차 해결 : 서브쿼리를 이용하여 선 정렬 수행후 rownum부여

select rownum ,TMP.* from(

select * from product order by price asc)TMP

;

TMP는 별칭이다

--top 3

select rownum ,TMP.* from(

select * from product order by price asc)TMP

where rownum<=3;

--Q : 가격이 비싼제품 TOP5

select rownum ,TMP.* from(

select * from product order by price desc)TMP

where rownum<=5;

--Q : 가장 최근에 만든 TOP3

select rownum ,TMP.* from(

select * from product order by made desc)TMP

where rownum between 1 and 3;

--가장 최근에 가입한 3명

select rownum ,TMP.* from(

select * from member order by member_join desc)TMP

where rownum between 1 and 3;

--Q : 가격이 비싼제품 3등부터 5등까지 조회

select rownum ,TMP.* from(

select * from product order by price desc)TMP

where rownum between 3 and 5;

--문제점: rownum은 부여하면서 조회하는 경우 1부터 시작하는 경우만 조회할수 있다.

--2차해결 : rownum을 다 부여해놓고 나중에 조건으로 처리

--rownum은 select를 할때 생성되는 값이므로 원하는 값을 "별칭"으로 특정해줄 필요가 잇다.

select* from (

select rownum rn ,TMP.* from(

select * from product order by price desc)

TMP)

where rn between 3 and 5;

 

이부분 빼고는 거의 공식처럼 사용된다고 봐도된다

'[DBMS] > - Oracle' 카테고리의 다른 글

[Oracle]기본키 Primary key  (0) 2022.05.30
[Oracle]그룹쿼리 Gruop by  (0) 2022.05.30
[Oracle]정렬 (Sort) asc/desc  (0) 2022.05.30
[Oracle]서브쿼리(subQuery)  (0) 2022.05.30
[Oracle]듀얼테이블(dualTable)이란 ?  (0) 2022.05.30

댓글