ORACLE函式介紹第六篇 著名函式之分析函式
AVG
COUNT
FIRST
FIRST_VALUE
LAST
LAST_VALUE
LAG
LEAD
MAX
MIN
SUM
DENSE_RANK
RANK
ROW_NUMBER
AVG([DISTINCT|ALL] expr) OVER(analytic_clause) 計算平均值。
例如:
--聚合函式
SELECT col, AVG(value) FROM tmp1 GROUP BY col ORDER BY col;
--分析函式
SELECT col, AVG(value) OVER(PARTITION BY col ORDER BY col)
FROM tmp1
ORDER BY col;
SUM ( [ DISTINCT | ALL ] expr ) OVER ( analytic_clause )
例如:
--聚合函式
SELECT col, sum(value) FROM tmp1 GROUP BY col ORDER BY col;
--分析函式
SELECT col, sum(value) OVER(PARTITION BY col ORDER BY col)
FROM tmp1
ORDER BY col;
COUNT({* | [DISTINCT | ALL] expr}) OVER (analytic_clause) 查詢分組序列中各組行數。
例如:
--分組查詢col的數量
SELECT col,count(0) over(partition by col order by col) ct FROM tmp1;
FIRST() 從DENSE_RANK返回的集合中取出排在第一的行。
例如:
--聚合函式
SELECT col,
MIN(value) KEEP(DENSE_RANK FIRST ORDER BY col) "Min Value",
MAX(value) KEEP(DENSE_RANK LAST ORDER BY col) "Max Value"
FROM tmp1
GROUP BY col;
--分析函式
SELECT col,
MIN(value) KEEP(DENSE_RANK FIRST ORDER BY col) OVER(PARTITION BY col),
MAX(value) KEEP(DENSE_RANK LAST ORDER BY col) OVER(PARTITION BY col)
FROM tmp1
ORDER BY col;
可以看到二者結果基本相似,但是ex1的結果是group by後的列,而ex2則是每一行都有返回。
LAST()與上同,不詳述。
例如:見上例。
FIRST_VALUE (col) OVER ( analytic_clause ) 返回over()條件查詢出的第一條記錄
例如:
insert into tmp1 values ('test6','287');
SELECT col,
FIRST_VALUE(value) over(partition by col order by value) "First",
LAST_VALUE(value) over(partition by col order by value) "Last"
FROM tmp1;
LAST_VALUE (col) OVER ( analytic_clause ) 返回over()條件查詢出的最後一條記錄
例如:見上例。
LAG(col[,n][,n]) over([partition_clause] order_by_clause) lag是一個相當有意思的函式,其功能是返回指定列col前n1行的值(如果前n1行已經超出比照範圍,則返回n2,如不指定n2則預設返回null),如不指定n1,其預設值為1。
例如:
SELECT col,
value,
LAG(value) over(order by value) "Lag",
LEAD(value) over(order by value) "Lead"
FROM tmp1;
LEAD(col[,n][,n]) over([partition_clause] order_by_clause) 與上函式正好相反,本函式返回指定列col後n1行的值。
例如:見上例
MAX (col) OVER (analytic_clause) 獲取分組序列中的最大值。
例如:
--聚合函式
SELECT col,
Max(value) "Max",
Min(value) "Min"
FROM tmp1
GROUP BY col;
--分析函式
SELECT col,
value,
Max(value) over(partition by col order by value) "Max",
Min(value) over(partition by col order by value) "Min"
FROM tmp1;
MIN (col) OVER (analytic_clause) 獲取分組序列中的最小值。
例如:見上例。
RANK() OVER([partition_clause] order_by_clause) 關於RANK和DENSE_RANK前面聚合函式處介紹過了,這裡不廢話不,大概直接看示例吧。
例如:
insert into tmp1 values ('test2',120);
SELECT col,
value,
RANK() OVER(order by value) "RANK",
DENSE_RANK() OVER(order by value) "DENSE_RANK",
ROW_NUMBER() OVER(order by value) "ROW_NUMBER"
FROM tmp1;
DENSE_RANK () OVER([partition_clause] order_by_clause)
例如:見上例。
ROW_NUMBER () OVER([partition_clause] order_by_clause) 這個函式需要多說兩句,通過上述的對比相信大家應該已經能夠看出些端倪。前面講過,dense_rank在做排序時如果遇到列有重複值,則重複值所在行的序列值相同,而其後的序列值依舊遞增,rank則是重複值所在行的序列值相同,但其後的序列值從+重複行數開始遞增,而row_number則不管是否有重複行,(分組內)序列值始終遞增
例如:見上例。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22283/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle常用函式介紹Oracle函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Oracle分析函式與視窗函式Oracle函式
- 原創:oracle聚合函式介紹Oracle函式
- stoi函式介紹函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- funclib函式庫介紹函式
- cuda函式庫介紹函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- oracle 函式Oracle函式
- oracle or 函式Oracle函式
- Python之函式的相關介紹Python函式
- 簡單介紹JS函式防抖和函式節流JS函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- javascript函式中with的介紹JavaScript函式
- Dart建構函式介紹Dart函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- Python資料分析--Numpy常用函式介紹(7)--Numpy中矩陣和通用函式Python函式矩陣
- Python資料分析--Numpy常用函式介紹(5)--Numpy中的相關性函式Python函式
- 10-函式-1-函式簡介函式
- ORACLE分析函式手冊(轉)Oracle函式
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- Oracle常用函式Oracle函式
- 7 Oracle 函式Oracle函式
- Oracle 字串函式Oracle字串函式
- Oracle 字串函式Oracle字串函式
- 函式式API簡介函式API
- 常見函式之單行函式函式
- oracle 10g函式大全–日期型函式Oracle 10g函式
- match函式簡單介紹以及與index函式結合應用函式Index
- 雜篇:Android繪製函式圖象及正弦函式的介紹Android函式
- JMeter36個內建函式及11個新增函式介紹JMeter函式
- Python資料分析--Numpy常用函式介紹(3)Python函式
- Python資料分析--Numpy常用函式介紹(2)Python函式
- 快速介紹幾個JS函式JS函式
- ES6 Generator 函式介紹函式
- javascript中generator函式的介紹JavaScript函式
- javascript高階函式的介紹JavaScript函式