使用row_number()分頁函式取代group by

BTxigua發表於2007-09-22

使用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章