使用row_number()分页函数取代group by。例如:
语句1:
select col1,col2 from t where col1 in (select col1 from t group by col1 having count(*) <=2 ) order
by order col2;
语句1可以用下面的语句取代:
语句2:
select col1,col2 from (select *,row_number() over(partition by col1 order by col2) as p_group from
t) where p_group<=2 ;
ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
表示根据COL1分组,在分组内部根据 COL2排序。而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的
)。
RANK() OVER (PARTITION BY COL1 ORDER BY COL2)
类似,不过RANK 排序的时候跟派名次一样,可以并列2个第一名之后 是第3名。
dense_rank() OVER (PARTITION BY COL1 ORDER BY COL2)
类似。是连续排序,有两个第二名时仍然跟着第三名。
dept sal emp row_number rank dense_rank
---- ------- ----- ---------- ----- ----------
10 5000.00 7839 1 1 1
10 2450.00 7782 2 2 2
10 1300.00 7934 3 3 3
20 3000.00 7788 1 1 1
20 3000.00 7902 2 1 1
20 2975.00 7566 3 3 2
20 1100.00 7876 4 4 3
20 800.00 7369 5 5 4
30 2850.00 7698 1 1 1
30 1600.00 7499 2 2 2
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10867315/viewspace-194842/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/10867315/viewspace-194842/