有些事情始終是需要堅持下去的。。。
今天復習一下之前用到的連續相同數據的統計。
首先,創建一個簡單的測試表,這里過程就略過了,直接上表(真的是以簡單為主,哈哈…)

第一種寫法row_number()
:
SELECT val,COUNT(*) FROM(SELECT ID,val,row_number() OVER(ORDER BY ID)-row_number() OVER(PARTITION BY val ORDER BY ID) xFROM LCY ) GROUP BY val,x ORDER BY MIN(ID);
第二種rank()
:
SELECT val,COUNT(*) FROM(SELECT ID,val,rank() OVER(ORDER BY ID)-rank() OVER(PARTITION BY val ORDER BY ID) xFROM LCY) GROUP BY val,x ORDER BY MIN(ID);
第三種dense_rank()
:
SELECT val,COUNT(*) FROM(SELECT ID,val,dense_rank() OVER(ORDER BY ID)-dense_rank() OVER(PARTITION BY val ORDER BY ID) xFROM LCY )GROUP BY val,x ORDER BY MIN(ID);
結果:

三者在這里的用法只是換湯不換藥,但是在其他的需求里還是有區別的,比如成績排名。
本章涉及到的知識點是分析函數、聚合函數,除此之外還有數據分析函數和統計求和函數。
簡單介紹一下:
聚合函數
- SUM :該函數計算組中表達式的累積和
- MIN :在一個組中的數據窗口中查找表達式的最小值
- MAX :在一個組中的數據窗口中查找表達式的最大值
- AVG :用于計算一個組和數據窗口內表達式的平均值。
- COUNT :對一組內發生的事情進行累積計數
分析函數
- RANK :根據ORDER BY子句中表達式的值,從查詢返回的每一行,計算它們與其它行的相對位置
- DENSE_RANK :根據ORDER BY子句中表達式的值,從查詢返回的每一行,計算它們與其它行的相對位置
- FIRST :從DENSE_RANK返回的集合中取出排在最前面的一個值的行
- LAST :從DENSE_RANK返回的集合中取出排在最后面的一個值的行
- FIRST_VALUE :返回組中數據窗口的第一個值
- LAST_VALUE :返回組中數據窗口的最后一個值。
- LAG :可以訪問結果集中的其它行而不用進行自連接
- LEAD :LEAD與LAG相反,LEAD可以訪問組中當前行之后的行
- ROW_NUMBER:返回有序組中一行的偏移量,從而可用于按特定標準排序的行號
數據分析函數
- STDDEV :計算當前行關于組的標準偏離
- STDDEV_POP:該函數計算總體標準偏離,并返回總體變量的平方根
- STDDEV_SAMP:該函數計算累積樣本標準偏離,并返回總體變量的平方根
- VAR_POP :該函數返回非空集合的總體變量(忽略null)
- VAR_SAMP :該函數返回非空集合的樣本變量(忽略null)
- VARIANCE :如果表達式中行數為1,則返回0,如果表達式中行數大于1,則返回VAR_SAMP
- COVAR_POP :返回一對表達式的總體協方差
- COVAR_SAMP:返回一對表達式的樣本協方差
- CORR :返回一對表達式的相關系數
- CUME_DIST :計算一行在組中的相對位置
- NTILE :將一個組分為"表達式"的散列表示
- PERCENT_RANK:和CUME_DIST(累積分配)函數類似
- PERCENTILE_DISC:返回一個與輸入的分布百分比值相對應的數據值
- PERCENTILE_CONT:返回一個與輸入的分布百分比值相對應的數據值
- RATIO_TO_REPORT:該函數計算expression/(sum(expression))的值,它給出相對于總數的百分比
- REGR_ (Linear Regression) Functions:這些線性回歸函數適合最小二乘法回歸線,有9個不同的回歸函數可使用
統計求和函數
CUBE :按照OLAP的CUBE方式進行數據統計,即各個維度均需統計
下一篇文章介紹三者的區別,還有其他一些常用的分析函數和聚合函數。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。
注:相關教程知識閱讀請移步到oracle教程頻道。