【Analytic】分析函式之MIN函式
大家對MIN函式一定非常瞭解,可能會問,不就是得到一組資料中最小值,有必要討論麼?
問的好,誠然,對於MIN函式的普通用法來說著實簡單,不過MIN函式還有一種分析函式的使用方法,可以得到每組資料分析之後的“最小值”。我們來透過兩條SQL比較一下這兩種用法。
1.萬變不離其宗,先看MIN函式的語法描述。
MIN([ DISTINCT | ALL ] expr)
[ OVER (analytic_clause) ]
從語法上看,有一個“OVER”型別的擴充套件,這便是分析函式語法部分。
2.透過實驗看一下兩種MIN函式的用法和區別
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)先看一下普通MIN函式的用法
sec@ora10g> select group_id, name, salary, min(salary) from t group by group_id, name, salary order by group_id;
GROUP_ID NAME SALARY MIN(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)再看一下分析函式MIN得到的最小值
sec@ora10g> select group_id, name, salary, min(salary) over (partition by group_id) analytic_min from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_MIN
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Kary 2400 800
2 Joe 800 800
3 Erick 3600 300
3 Andy 600 300
3 Mary 300 300
6 rows selected.
注意這裡得到的最小值與基本MIN函式得到的最小值區別,這裡的最小值是每行記錄所對應組內的最小薪酬值。
這樣的最小值是非常有意義的,在複雜的資料統計和分析系統中用處極大。
3.小結
本文透過兩個例子展示了MIN函式的兩種使用方法,為了清晰的比較,給出的都是最基本的使用方法。對於MIN的分析函式的使用還可以進一步的擴充套件,慢慢體會吧。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.08
-- The End --
問的好,誠然,對於MIN函式的普通用法來說著實簡單,不過MIN函式還有一種分析函式的使用方法,可以得到每組資料分析之後的“最小值”。我們來透過兩條SQL比較一下這兩種用法。
1.萬變不離其宗,先看MIN函式的語法描述。
MIN([ DISTINCT | ALL ] expr)
[ OVER (analytic_clause) ]
從語法上看,有一個“OVER”型別的擴充套件,這便是分析函式語法部分。
2.透過實驗看一下兩種MIN函式的用法和區別
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)先看一下普通MIN函式的用法
sec@ora10g> select group_id, name, salary, min(salary) from t group by group_id, name, salary order by group_id;
GROUP_ID NAME SALARY MIN(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)再看一下分析函式MIN得到的最小值
sec@ora10g> select group_id, name, salary, min(salary) over (partition by group_id) analytic_min from t order by group_id;
GROUP_ID NAME SALARY ANALYTIC_MIN
---------- ------------------------------ ---------- ------------
1 Tom 1200 1200
2 Kary 2400 800
2 Joe 800 800
3 Erick 3600 300
3 Andy 600 300
3 Mary 300 300
6 rows selected.
注意這裡得到的最小值與基本MIN函式得到的最小值區別,這裡的最小值是每行記錄所對應組內的最小薪酬值。
這樣的最小值是非常有意義的,在複雜的資料統計和分析系統中用處極大。
3.小結
本文透過兩個例子展示了MIN函式的兩種使用方法,為了清晰的比較,給出的都是最基本的使用方法。對於MIN的分析函式的使用還可以進一步的擴充套件,慢慢體會吧。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.08
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-624736/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【Analytic】分析函式之MAX函式函式
- 【Analytic】分析函式之AVG函式函式
- 【Analytic】分析函式之RANK函式函式
- 【Analytic】分析函式之COUNT函式函式
- 【Analytic】分析函式之ROW_NUMBER函式函式
- 【Analytic】分析函式之DENSE_RANK函式函式
- 【Analytic】分析函式之FIRST_VALUE函式函式
- 【Analytic】分析函式之LAST_VALUE函式函式AST
- 包含min函式的棧函式
- ORACLE HANDBOOK系列之一:Oracle分析函式(Analytic Function)Oracle函式Function
- 【分析函式】Oracle分析函式之LAG和LEAD函式Oracle
- Oracle聚合函式/分析函式Oracle函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- Oracle分析函式七——分析函式案例Oracle函式
- 設計包含min函式的棧函式
- 字串函式之Strtok()函式字串函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- 分析函式函式
- 劍指offer——包含min函式的棧函式
- 【劍指offer】包含min函式的棧函式
- min_element 函式的 STL 範例函式
- 分析函式之視窗子句函式
- 分析函式之排名統計函式
- Oracle分析函式與視窗函式Oracle函式
- 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