ORACLE函式介紹第七篇 非著名函式之分析函式
oracle函式介紹(7) 非著名函式之分析函式(含如下函式介紹):
CUME_DIST
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RATIO_TO_REPORT
STDDEV
STDDEV_POP
STDDEV_SAMP
VAR_POP
VAR_SAMP
VARIANCE
CUME_DIST() OVER([partition_clause] order_by_clause) 返回該行在分組序列中的相對位置,返回值介於0到1之間。注意喲,如果order by的列是desc,則該分組內最大的行返回列值1,如果order by為asc,則該分組內最小的行返回列值1。
例如:SELECT col, value, CUME_DIST() OVER(ORDER BY value DESC) FROM tmp1;
NTILE(n) OVER([partition_clause] order_by_clause)
ntile是個很有意思的統計函式。它會按照你指定的組數(n)對記錄做分組
例如:SELECT t.*,ntile(5) over(order by value desc) FROM tmp1 t;
PERCENT_RANK() OVER([partition_clause] order_by_clause) 與CUME_DIST類似,本函式返回分組序列中各行在分組序列的相對位置。其返回值也是介於0到1之間,不過其起始值始終為0而終結值始終為1。
例如:SELECT col, value, PERCENT_RANK() OVER(ORDER BY value) FROM tmp1;
PERCENTILE_CONT(n) WITHIN GROUP (ORDER BY col [DESC|ASC]) OVER(partition_clause)
本函式功能與前面聚合函式處介紹的完全相同,只是一個是聚合函式,一個是分析函式。
例如:
--聚合函式
SELECT col, max(value), min(value), sum(value),
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY value) a,
PERCENTILE_CONT(0.8) WITHIN GROUP(ORDER BY value) b
FROM TMP1
group by col;
--分析函式
SELECT col,
value,
sum(value) over(partition by col) "Sum",
PERCENTILE_CONT(0.5) WITHIN GROUP( ORDER BY value) OVER(PARTITION BY col) "CONTa",
PERCENTILE_CONT(0.8) WITHIN GROUP( ORDER BY value) OVER(PARTITION BY col) "CONTb"
FROM TMP1;
PERCENTILE_DISC(n) WITHIN GROUP (ORDER BY col [DESC|ASC]) OVER(partition_clause)
本函式功能與前面聚合函式處介紹的完全相同,只是一個是聚合函式,一個是分析函式。
例如:
--聚合函式
SELECT col, max(value), min(value), sum(value),
PERCENTILE_DISC(0.5) WITHIN GROUP(ORDER BY value) a,
PERCENTILE_DISC(0.8) WITHIN GROUP(ORDER BY value) b
FROM TMP1
group by col;
--分析函式
SELECT col,
value,
sum(value) over(partition by col) "Sum",
PERCENTILE_DISC(0.5) WITHIN GROUP( ORDER BY value) OVER(PARTITION BY col) "CONTa",
PERCENTILE_DISC(0.8) WITHIN GROUP( ORDER BY value) OVER(PARTITION BY col) "CONTb"
FROM TMP1;
RATIO_TO_REPORT(col) over ([partition_clause]) 本函式計算本行col列值在該分組序列sum(col)中所佔比率。如果col列為空,則返回空值。
例如:
SELECT col, value,
RATIO_TO_REPORT(value) OVER(PARTITION BY col) "RATIO_TO_REPORT"
FROM TMP1
STDDEV ([distinct|all] col) OVER (analytic_clause) 返回列的標準偏差。
例如:
--聚合函式
SELECT col, STDDEV(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
STDDEV(value) OVER(PARTITION BY col ORDER BY value) "STDDEV"
FROM TMP1;
STDDEV_SAMP(col) OVER (analytic_clause) 功能與上相同,與STDDEV不同地方在於如果該分組序列只有一行的話,則STDDEV_SAMP函式返回空值,而STDDEV則返回0。
例如:
--聚合函式
SELECT col, STDDEV(value),STDDEV_SAMP(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
STDDEV(value) OVER(PARTITION BY col ORDER BY value) "STDDEV",
STDDEV_SAMP(value) OVER(PARTITION BY col ORDER BY value) "STDDEV_SAMP"
FROM TMP1;
STDDEV_POP(col) OVER (analytic_clause) 返回該分組序列總體標準偏差
例如:
--聚合函式
SELECT col, STDDEV_POP(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
STDDEV_POP(value) OVER(PARTITION BY col ORDER BY value) "STDDEV_POP"
FROM TMP1;
VAR_POP(col) OVER (analytic_clause) 返回分組序列的總體方差,VAR_POP進行如下計算:(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / COUNT(expr)
例如:
--聚合函式
SELECT col, VAR_POP(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
VAR_POP(value) OVER(PARTITION BY col ORDER BY value) "VAR_POP"
FROM TMP1;
VAR_SAMP(col) OVER (analytic_clause) 與上類似,該函式返回分組序列的樣本方差,,其計算公式為:(SUM(expr2) - SUM(expr)2 / COUNT(expr)) / (COUNT(expr) - 1)
例如:
--聚合函式
SELECT col, VAR_SAMP(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
VAR_SAMP(value) OVER(PARTITION BY col ORDER BY value) "VAR_SAMP"
FROM TMP1;
VARIANCE(col) OVER (analytic_clause) 該函式返回分組序列方差,Oracle計算該變數如下:
如果表示式中行數為1,則返回0,如果表示式中行數大於1,則返回VAR_SAMP
例如:
--聚合函式
SELECT col, VAR_SAMP(value),VARIANCE(value) FROM TMP1 GROUP BY col;
--分析函式
SELECT col, value,
VAR_SAMP(value) OVER(PARTITION BY col ORDER BY value) "VAR_SAMP",
VARIANCE(value) OVER(PARTITION BY col ORDER BY value) "VARIANCE"
FROM TMP1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-22284/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE函式介紹第四篇 非著名函式之聚合函式Oracle函式
- ORACLE函式介紹第二篇 非著名函式之單值函式Oracle函式
- ORACLE函式介紹第六篇 著名函式之分析函式Oracle函式
- ORACLE函式介紹第三篇 著名函式之聚合函式Oracle函式
- ORACLE函式介紹第一篇 著名函式之單值函式Oracle函式
- 【函式】Oracle TRIM函式語法介紹函式Oracle
- ORACLE函式介紹Oracle函式
- ORACLE函式介紹第五篇 分析函式簡述Oracle函式
- Oracle 分析函式使用介紹(轉)Oracle函式
- oracle常用函式介紹Oracle函式
- oracle REPLACE 函式 介紹Oracle函式
- oracle 日期函式介紹Oracle函式
- Oracle聚合函式/分析函式Oracle函式
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- Oracle分析函式七——分析函式案例Oracle函式
- 函式表示式和函式宣告簡單介紹函式
- Oracle 的基本函式介紹Oracle函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Oracle分析函式與視窗函式Oracle函式
- 【Analytic】分析函式之MIN函式函式
- 【Analytic】分析函式之MAX函式函式
- 【Analytic】分析函式之AVG函式函式
- 【Analytic】分析函式之RANK函式函式
- 【Analytic】分析函式之COUNT函式函式
- TypeScript 函式介紹TypeScript函式
- Oracle 分析函式Oracle函式
- Oracle分析函式Oracle函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- 原創:oracle聚合函式介紹Oracle函式
- Oracle 8 的函式介紹(轉)Oracle函式
- oracle 10g函式大全--分析函式Oracle 10g函式
- 【函式】ORACLE函式大全函式Oracle
- Signal ()函式詳細介紹 Linux函式函式Linux
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式
- ORACLE單行函式與多行函式之六:通用函式示例Oracle函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- Oracle 函式大全(字串函式,數學函式,日期函式,邏輯運算函式,其他函式)Oracle函式字串
- 【函式】Oracle EXTRACT()函式與to_char() 函式函式Oracle