資源描述:
《Oracle分析函數(shù)使用總結(jié).doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、Oracle分析函數(shù)使用總結(jié)1.使用評級函數(shù)評級函數(shù)(rankingfunction)用于計算等級、百分點、n分片等等,下面是幾個常用到的評級函數(shù):RANK():返回數(shù)據(jù)項在分組中的排名。特點:在排名相等的情況下會在名次中留下空位DENSE_RANK():與RANK不同的是它在排名相等的情況下不會在名次中留下空位CUME_DIST():返回特定值相對于一組值的位置:他是“cumulativedistribution”(累積分布)的簡寫PERCENT_RANK():返回某個值相對于一組值的百分比排名NTILE():返回n分片后的值,比如三分片、四分片等等ROW_NUMBER():為每一條分組
2、紀錄返回一個數(shù)字下面我們分別舉例來說明這些函數(shù)的使用1)RANK()與DENSE-RANK()首先顯示下我們的源表數(shù)據(jù)的結(jié)構(gòu)及部分數(shù)據(jù):SQL>descall_sales;名稱是否為空?類型------------------------------------------------------------YEARNOTNULLNUMBER(38)MONTHNOTNULLNUMBER(38)PRD_TYPE_IDNOTNULLNUMBER(38)EMP_IDNOTNULLNUMBER(38)AMOUNTNUMBER(8,2)SQL>select*fromall_saleswhererow
3、num<11;YEARMONTHPRD_TYPE_IDEMP_IDAMOUNT---------------------------------------------------2003112110034.842003212115144.652003312120137.832003412125057.452003512117214.562003612115564.642003712112654.842003812117434.822003912119854.5720031012121754.19已選擇10行。好接下來我們將舉例來說明上述函數(shù)的使用:首先是RANK()與DENSE-RANK
4、()的使用:SQL>select2prd_type_id,sum(amount),3RANK()OVER(ORDERBYSUM(amount)DESC)ASrank,4DENSE_RANK()OVER(ORDERBYSUM(amount)DESC)ASdense_rank5fromall_sales6whereyear=20037groupbyprd_type_id8orderbyrank;PRD_TYPE_IDSUM(AMOUNT)RANKDENSE_RANK------------------------------------------5111905081.84223478270.
5、91334402751.16442186381.2255注意:這里PRD_TYPE_ID列為5的SUM(AMOUNT)的值為空,RANK()和DENSE-RANK在這一行的返回值為1。因為默認狀態(tài)下RANK()和DENSE-RANK()在遞減排序中將空值指定為最高排名1,而在遞增排序中則把它指定為最低排名。這里還有一個問題就是我們的例子中沒有SUM(AMOUNT)相等的值,如果有的話RANK與DENSE-RANK將表現(xiàn)出區(qū)別比如上面的例子如果PRD_TYPE_ID為4的SUM(AMOUNT)的值也為:478270.91的話,那么上面語句的輸出則為:PRD_TYPE_IDSUM(AMOUNT
6、)RANKDENSE_RANK------------------------------------------5111905081.84223478270.91334478270.91332186381.2254此外這里還有兩個參數(shù)來限制空值的排序即:NULLSFIRST和NULLSLAST我們還以上面的例子來看:SQL>select2prd_type_id,sum(amount),3RANK()OVER(ORDERBYSUM(amount)DESCNULLSLAST)ASrank,4DENSE_RANK()OVER(ORDERBYSUM(amount)DESCNULLSLAST)AS
7、dense_rank5fromall_sales6whereyear=20037groupbyprd_type_id8*orderbyrankPRD_TYPE_IDSUM(AMOUNT)RANKDENSE_RANK------------------------------------------1905081.84113478270.91224402751.16332186381.2244555可以看出剛才我們不使用N