【Analytic】分析函式之AVG函式
我們透過這個文章來看一下AVG函式的普通用法和分析函式用法的區別。都是得到平均數,但是作用的範圍是不一樣的。
【Analytic】分析函式之MIN函式:http://space.itpub.net/519536/viewspace-624736
【Analytic】分析函式之MAX函式:http://space.itpub.net/519536/viewspace-624749
1.萬變不離其宗,先看AVG函式的語法描述。
AVG([ DISTINCT | ALL ] expr)
[ OVER(analytic_clause) ]
2.透過實驗看一下兩種AVG函式的用法和區別
1)建立測試表T,並初始化幾條資料。
sec@ora10g> create table t (group_id number(10), name varchar2(10), salary int);
sec@ora10g> insert into t values (1,'Tom',1200);
sec@ora10g> insert into t values (2,'Kary',2400);
sec@ora10g> insert into t values (2,'Joe',800);
sec@ora10g> insert into t values (3,'Erick',3600);
sec@ora10g> insert into t values (3,'Andy',600);
sec@ora10g> insert into t values (3,'Mary',300);
sec@ora10g> commit;
2)T表全貌
sec@ora10g> select * from t;
GROUP_ID NAME SALARY
---------- ------------------------------ ----------
1 Tom 1200
2 Kary 2400
2 Joe 800
3 Erick 3600
3 Andy 600
3 Mary 300
6 rows selected.
共三組資料,group_id分別是1、2和3。第1組有一個人,第2組有兩個人,第3組有三個人。最後一列是每個人的薪水值。
3)先看一下普通AVG函式的用法
sec@ora10g> select group_id, name, salary, avg(salary) from t group by group_id, name, salary order by group_id;
GROUP_ID NAME SALARY AVG(SALARY)
---------- ------------------------------ ---------- -----------
1 Tom 1200 1200
2 Joe 800 800
2 Kary 2400 2400
3 Andy 600 600
3 Erick 3600 3600
3 Mary 300 300
6 rows selected.
得到的最大值是按照“group_id, name, salary”三列進行分組後的每組最大值。
4)再看一下分析函式AVG得到的平均值
sec@ora10g> select group_id, name, salary, avg(salary) over (partition by group_id) analytic_avg from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_AVG
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Kary 2400 1600
2 Joe 800 1600
3 Erick 3600 1500
3 Andy 600 1500
3 Mary 300 1500
6 rows selected.
注意這裡得到的平均值與基本AVG函式得到的平均值區別,這裡的平均值是每行記錄所對應組內的平均薪酬值。
5)我們進一步限定一下計算的範圍
sec@ora10g> select group_id, name, salary, avg(salary) over (partition by group_id order by name rows between 1 preceding and 1 following) analytic_avg from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_AVG
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Joe 800 1600
2 Kary 2400 1600
3 Andy 600 2100
3 Erick 3600 1500
3 Mary 300 1950
6 rows selected.
此時得到的薪酬值是每行記錄與其之前的記錄和其之後的記錄三者的平均值。
注意頭和尾的平均值計算方法。
頭:組內第一條記錄與第二條記錄的和除以二得到第一條記錄的平均值;
尾:組內最後一條記錄與倒數第二條記錄的和除以二得到最後一條記錄的平均值。
3.小結
具體問題具體分析,在統計分析報表系統中AVG分析函式用處頗大。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.10
-- The End --
【Analytic】分析函式之MIN函式:http://space.itpub.net/519536/viewspace-624736
【Analytic】分析函式之MAX函式:http://space.itpub.net/519536/viewspace-624749
1.萬變不離其宗,先看AVG函式的語法描述。
AVG([ DISTINCT | ALL ] expr)
[ OVER(analytic_clause) ]
2.透過實驗看一下兩種AVG函式的用法和區別
1)建立測試表T,並初始化幾條資料。
sec@ora10g> create table t (group_id number(10), name varchar2(10), salary int);
sec@ora10g> insert into t values (1,'Tom',1200);
sec@ora10g> insert into t values (2,'Kary',2400);
sec@ora10g> insert into t values (2,'Joe',800);
sec@ora10g> insert into t values (3,'Erick',3600);
sec@ora10g> insert into t values (3,'Andy',600);
sec@ora10g> insert into t values (3,'Mary',300);
sec@ora10g> commit;
2)T表全貌
sec@ora10g> select * from t;
GROUP_ID NAME SALARY
---------- ------------------------------ ----------
1 Tom 1200
2 Kary 2400
2 Joe 800
3 Erick 3600
3 Andy 600
3 Mary 300
6 rows selected.
共三組資料,group_id分別是1、2和3。第1組有一個人,第2組有兩個人,第3組有三個人。最後一列是每個人的薪水值。
3)先看一下普通AVG函式的用法
sec@ora10g> select group_id, name, salary, avg(salary) from t group by group_id, name, salary order by group_id;
GROUP_ID NAME SALARY AVG(SALARY)
---------- ------------------------------ ---------- -----------
1 Tom 1200 1200
2 Joe 800 800
2 Kary 2400 2400
3 Andy 600 600
3 Erick 3600 3600
3 Mary 300 300
6 rows selected.
得到的最大值是按照“group_id, name, salary”三列進行分組後的每組最大值。
4)再看一下分析函式AVG得到的平均值
sec@ora10g> select group_id, name, salary, avg(salary) over (partition by group_id) analytic_avg from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_AVG
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Kary 2400 1600
2 Joe 800 1600
3 Erick 3600 1500
3 Andy 600 1500
3 Mary 300 1500
6 rows selected.
注意這裡得到的平均值與基本AVG函式得到的平均值區別,這裡的平均值是每行記錄所對應組內的平均薪酬值。
5)我們進一步限定一下計算的範圍
sec@ora10g> select group_id, name, salary, avg(salary) over (partition by group_id order by name rows between 1 preceding and 1 following) analytic_avg from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_AVG
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Joe 800 1600
2 Kary 2400 1600
3 Andy 600 2100
3 Erick 3600 1500
3 Mary 300 1950
6 rows selected.
此時得到的薪酬值是每行記錄與其之前的記錄和其之後的記錄三者的平均值。
注意頭和尾的平均值計算方法。
頭:組內第一條記錄與第二條記錄的和除以二得到第一條記錄的平均值;
尾:組內最後一條記錄與倒數第二條記錄的和除以二得到最後一條記錄的平均值。
3.小結
具體問題具體分析,在統計分析報表系統中AVG分析函式用處頗大。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.10
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-624799/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Analytic】分析函式之MIN函式函式
- 【Analytic】分析函式之MAX函式函式
- 【Analytic】分析函式之RANK函式函式
- 【Analytic】分析函式之COUNT函式函式
- 【Analytic】分析函式之ROW_NUMBER函式函式
- 【Analytic】分析函式之DENSE_RANK函式函式
- 【Analytic】分析函式之FIRST_VALUE函式函式
- 【Analytic】分析函式之LAST_VALUE函式函式AST
- ORACLE HANDBOOK系列之一:Oracle分析函式(Analytic Function)Oracle函式Function
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- Oracle聚合函式/分析函式Oracle函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Oracle分析函式七——分析函式案例Oracle函式
- 字串函式之Strtok()函式字串函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 分析函式函式
- 分析函式之視窗子句函式
- 分析函式之排名統計函式
- Oracle分析函式與視窗函式Oracle函式
- 兩個SQL語句技巧——NULLS FIRST/LAST和分析函式版AVGSQLNullAST函式
- ORACLE單行函式與多行函式之七:多行函式之分組函式示例Oracle函式
- 常見函式之單行函式函式
- oracle 10g函式大全--分析函式Oracle 10g函式
- sql優化用group by 函式代替分析函式SQL優化函式
- 分析函式概述函式
- 分析函式 over函式
- Oracle 分析函式Oracle函式
- 分析函式 - LAG函式
- Oracle分析函式Oracle函式
- ORACLE單行函式與多行函式之四:日期函式示例Oracle函式
- ORACLE單行函式與多行函式之六:通用函式示例Oracle函式
- ORACLE函式介紹第六篇 著名函式之分析函式Oracle函式
- 【實驗】分析函式之魅力展示函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- oracle的分析函式over 及開窗函式Oracle函式
- mysql 自定義分析函式 least 及 日期函式MySql函式AST
- ORACLE單行函式與多行函式之五:轉換函式示例Oracle函式
- ORACLE函式介紹第三篇 著名函式之聚合函式Oracle函式