within group語句和group by沒有半毛錢關系,隻是一些單值聚合函數的輔助關鍵字,下面以rank函數為例。
rank在oracle中分為聚合函數和分析函數兩種,本篇不介紹分析函數,參考分析函數篇章。
聚合函數的rank文法為:rank(expr1,expr2) within group (order by expr3,expr4 [desc/asc] nulls [first/last])
表示計算以expr3,expr4為排序條件的結果集中,expr3=expr1 and expr4=expr2的記錄排序号,傳回為數字類型。排序為非緊湊排序,即前兩條記錄相同,那麼排序号依次是1,1,3... 使用時無需一定要和group by搭配使用。
所謂觸類旁通,隻要知道within group在rank中的含義,那麼和其他函數一起使用時,也就無師自通了。
可以使用within group關鍵字的函數有rank,dense_rank,PERCENT_RANK,PERCENTILE_CONT,PERCENTILE_DISC等