Using the built-in function paging will certainly be more efficient. This article introduces an efficient paging Method for Oracle row_number (). For more information, see.
Step 1: Use rownum first
| The Code is as follows: |
Copy code |
-- Pagination row_number, not rownum -- Sort by n_count from large to small, 3 entries per page Select rownum r, t. * FROM t_news t Where rownum <= 3 Order by t. n_count DESC -- Question: Why is the row number messy after order? Select rownum r, t. * FROM t_news t -- Cause: the row number is allocated first, and then sorted by n_count. -- So it must be sorted and the row number is generated. Select rownum r, t. * FROM ( SELECT t. * FROM t_news t order by t. n_count DESC) t -- Paging -- Err Select rownum r, t. * FROM ( SELECT t. * FROM t_news t order by t. n_count DESC) t WHERE r between 1 AND 3 -- 1st page Select rownum r, t. * FROM ( SELECT t. * FROM t_news t order by t. n_count DESC) t Where rownum between 1 AND 3 -- 2nd page Select rownum r, t. * FROM ( SELECT t. * FROM t_news t order by t. n_count DESC) t Where rownum between 4 AND 6 -- Error: ROWNUM must start from 1! SELECT k. * FROM ( Select rownum r, t. * FROM ( SELECT t. * FROM t_news t order by t. n_count DESC) t ) K WHERE r BETWEEN 4 AND 6 |
-- Trouble, low efficiency!
* *** Step 2: Use the row_number () over () function.
| The Code is as follows: |
Copy code |
Select t2. * from (Select t. *, row_number () over (order by t. n_count desc) orderNumber from t_news t order by t. n_count desc) t2 where orderNumber between 1and 3; **************************************** **************************************** **************************************** ****************** 88 SELECT * FROM ( SELECT t. *, row_number () over (order by n_count DESC) r FROM t_news t Order by t. n_count DESC ) T WHERE r BETWEEN 4 AND 6
|
-- General Syntax: resolution function () over (partition by field order by field)