자바(Java)

[자바] 오라클 페이징 paging 쿼리

xemaker 2018. 10. 1. 16:12

오라클 페이징 쿼리 원리


select a.*

from(

select row_number() over(order by app asc) as r_num

,count(*) over () as totcount

,(row_number() over (order by app desc)) page0

,(row_number() over (order by app desc)-1) / 5 as page1

,floor( (row_number() over(order by app desc)-1) -1 / 5 +1 ) as page0

from table

)a

;


결과:

r_num totcount page0 page1 page

100 100 1 0 1

99 100 2 0.2 1

98 100 3 0.4 1

97 100 4 0.6 1

96 100 5 0.8 1

95 100 6 1 2

94 100 7 1.2 2

93 100 8 1.4 2

92 100 9 1.6 2

91 100 10 1.8 2

90 100 11 2 3

89 100 12 2.2 3

88 100 13 2.4 3

87 100 14 2.6 3



2페이지만 출력한다고 했을때는


select a.*

from(

select row_number() over(order by app asc) as r_num

,count(*) over () as totcount

,(row_number() over (order by app desc)) page0

,(row_number() over (order by app desc)-1) / 5 as page1

,floor( (row_number() over(order by app desc)-1) -1 / 5 +1 ) as page0

from table

)a

where page=2

;


결과:

r_num totcount page0 page1 page

95 100 6 1 2

94 100 7 1.2 2

93 100 8 1.4 2

92 100 9 1.6 2

91 100 10 1.8 2