今天小編就為大家分享一篇關於Oracle連續相同資料的統計,內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧。
今天覆習一下之前用到的連續相同資料的統計。
首先,建立一個簡單的測試表,這裡過程就略過了,直接上表(真的是以簡單為主,哈哈…)
第一種寫法row_number()
:
SELECT
val,
COUNT
(*)
FROM
(
SELECT
ID,val,
row_number() OVER(
ORDER
BY
ID)-row_number() OVER(PARTITION
BY
val
ORDER
BY
ID) x
FROM
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) x
FROM
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) x
FROM
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方式進行資料統計,即各個維度均需統計
下一篇文章介紹三者的區別,還有其他一些常用的分析函式和聚合函式。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,