Oracle - over函數(shù)作用 over()函數(shù)是Oracle的分析函數(shù),其語法如下:
函數(shù)名( [ 參數(shù) ] ) over( [ 分區(qū)子句 ] [ 排序子句 [ 滑動窗口子句 ] ])
分區(qū)子句類似于聚組函數(shù)所需要的group by,排序子句可看成是SQL語句中的order by,只不過在此語句中還可指定null值排前(nulls first)還是排后(nulls last)?;瑒哟翱谡Z句就比較復(fù)雜,參見manual中的sql reference,總體說明可見:http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/functions2a.htm#81409 示例1:剔除重復(fù)記錄表temp_b的記錄:執(zhí)行如下SQL語句: select * from (
剔除表temp_a中city_name相同的記錄select city_name, city_code, prov_id, row_number() over(partition by city_name order by 1) r from temp_a ) where r = 1; 示例2:分組排序成績表的所有記錄如下:執(zhí)行如下SQL語句: select student_name, class, score, dense_rank() over(partition by class order by score desc) 名次 from temp_b;
分班級按成績排名次排序如下:提示: 函數(shù)dense_rank()是連續(xù)排序,有兩個第二名時仍然跟著第三名。 函數(shù)rank()是跳躍排序,有兩個第二名時接下來就是第四名(同樣是在各個分組內(nèi)) 示例3:分組統(tǒng)計成績表的所有記錄如下:執(zhí)行如下SQL語句: select student_name, class, score, sum(score) over(partition by class order by score desc) 累計 from temp_b;
班級成績累計("連續(xù)"求和)結(jié)果如下:提示:此功能用于統(tǒng)計某一段時間每天累計的收入非常有用。 執(zhí)行如下SQL語句: select student_name, class, score, sum(score) over(partition by class) 班級總分 from temp_b;
班級成績總分統(tǒng)計如下: |
|