【Analytic】分析函式之COUNT函式
我們透過這個文章來看一下COUNT函式的用法。這篇文章將帶給您一種超乎平常的“COUNT感覺”。
【Analytic】分析函式之MIN函式:http://space.itpub.net/519536/viewspace-624736
【Analytic】分析函式之MAX函式:http://space.itpub.net/519536/viewspace-624749
【Analytic】分析函式之AVG函式:http://space.itpub.net/519536/viewspace-624799
【Analytic】分析函式之ROW_NUMBER函式:http://space.itpub.net/519536/viewspace-624886
【Analytic】分析函式之RANK函式:http://space.itpub.net/519536/viewspace-624985
【Analytic】分析函式之DENSE_RANK函式:http://space.itpub.net/519536/viewspace-625115
1.萬變不離其宗,先看COUNT函式的語法描述。
COUNT({ * | [ DISTINCT | ALL ] expr })
[ OVER (analytic_clause) ]
2.透過實驗看一下普通COUNT函式和分析函式COUNT的使用方法
1)建立測試表T,並初始化9條資料。
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,'Andy',100);
sec@ora10g> insert into t values (3,'Ellen',200);
sec@ora10g> insert into t values (3,'Erick',300);
sec@ora10g> insert into t values (3,'Hou',400);
sec@ora10g> insert into t values (3,'Mary',500);
sec@ora10g> insert into t values (3,'Secooler',600);
sec@ora10g> commit;
2)T表全貌
sec@ora10g> select * from t order by group_id,name;
GROUP_ID NAME SALARY
---------- ---------- ----------
1 Tom 1200
2 Joe 800
2 Kary 2400
3 Andy 100
3 Ellen 200
3 Erick 300
3 Hou 400
3 Mary 500
3 Secooler 600
9 rows selected.
共三組資料,group_id分別是1、2和3。第1組有一個人,第2組有兩個人,第3組有六個人。最後一列是每個人的薪水值。
3)普通COUNT函式使用方法,地球人都知道。不過要注意,要結合group by分組使用。
sec@ora10g> select group_id, count(*) from t group by group_id;
GROUP_ID COUNT(*)
---------- ----------
1 1
2 2
3 6
4)分析函式COUNT的混合使用方法
sec@ora10g> col name for a10
sec@ora10g> select group_id, name, salary, count(*) over () as count1, count(*) over (order by salary) as count2,count(*) over (order by salary range between 200 preceding and 300 following) as count3 from t order by group_id, name;
GROUP_ID NAME SALARY COUNT1 COUNT2 COUNT3
---------- ---------- ---------- ---------- ---------- ----------
1 Tom 1200 9 8 1
2 Joe 800 9 7 2
2 Kary 2400 9 9 1
3 Andy 100 9 1 4
3 Ellen 200 9 2 5
3 Erick 300 9 3 6
3 Hou 400 9 4 5
3 Mary 500 9 5 5
3 Secooler 600 9 6 4
9 rows selected.
COUNT1得到所有參與計算的行的數量(非空);
COUNT2得到比自己薪水少的人數(包括自己在內);
COUNT3得到比自己薪水少200元多300元的人數(包括自己在內)。
3.小結
體驗了COUNT分析函式帶給我我們的神奇之後,您是不是有一種深入探索的衝動。心動不如行動,快使用手邊的資料實驗一番吧,也許有一天在遇到特殊需求時,COUNT分析函式會帶給您另外一種解決方案和便利。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.14
-- The End --
【Analytic】分析函式之MIN函式:http://space.itpub.net/519536/viewspace-624736
【Analytic】分析函式之MAX函式:http://space.itpub.net/519536/viewspace-624749
【Analytic】分析函式之AVG函式:http://space.itpub.net/519536/viewspace-624799
【Analytic】分析函式之ROW_NUMBER函式:http://space.itpub.net/519536/viewspace-624886
【Analytic】分析函式之RANK函式:http://space.itpub.net/519536/viewspace-624985
【Analytic】分析函式之DENSE_RANK函式:http://space.itpub.net/519536/viewspace-625115
1.萬變不離其宗,先看COUNT函式的語法描述。
COUNT({ * | [ DISTINCT | ALL ] expr })
[ OVER (analytic_clause) ]
2.透過實驗看一下普通COUNT函式和分析函式COUNT的使用方法
1)建立測試表T,並初始化9條資料。
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,'Andy',100);
sec@ora10g> insert into t values (3,'Ellen',200);
sec@ora10g> insert into t values (3,'Erick',300);
sec@ora10g> insert into t values (3,'Hou',400);
sec@ora10g> insert into t values (3,'Mary',500);
sec@ora10g> insert into t values (3,'Secooler',600);
sec@ora10g> commit;
2)T表全貌
sec@ora10g> select * from t order by group_id,name;
GROUP_ID NAME SALARY
---------- ---------- ----------
1 Tom 1200
2 Joe 800
2 Kary 2400
3 Andy 100
3 Ellen 200
3 Erick 300
3 Hou 400
3 Mary 500
3 Secooler 600
9 rows selected.
共三組資料,group_id分別是1、2和3。第1組有一個人,第2組有兩個人,第3組有六個人。最後一列是每個人的薪水值。
3)普通COUNT函式使用方法,地球人都知道。不過要注意,要結合group by分組使用。
sec@ora10g> select group_id, count(*) from t group by group_id;
GROUP_ID COUNT(*)
---------- ----------
1 1
2 2
3 6
4)分析函式COUNT的混合使用方法
sec@ora10g> col name for a10
sec@ora10g> select group_id, name, salary, count(*) over () as count1, count(*) over (order by salary) as count2,count(*) over (order by salary range between 200 preceding and 300 following) as count3 from t order by group_id, name;
GROUP_ID NAME SALARY COUNT1 COUNT2 COUNT3
---------- ---------- ---------- ---------- ---------- ----------
1 Tom 1200 9 8 1
2 Joe 800 9 7 2
2 Kary 2400 9 9 1
3 Andy 100 9 1 4
3 Ellen 200 9 2 5
3 Erick 300 9 3 6
3 Hou 400 9 4 5
3 Mary 500 9 5 5
3 Secooler 600 9 6 4
9 rows selected.
COUNT1得到所有參與計算的行的數量(非空);
COUNT2得到比自己薪水少的人數(包括自己在內);
COUNT3得到比自己薪水少200元多300元的人數(包括自己在內)。
3.小結
體驗了COUNT分析函式帶給我我們的神奇之後,您是不是有一種深入探索的衝動。心動不如行動,快使用手邊的資料實驗一番吧,也許有一天在遇到特殊需求時,COUNT分析函式會帶給您另外一種解決方案和便利。
有關分析函式的擴充套件可以參考Oracle的官方文件中的“Analytic Functions”描述:
Good luck.
secooler
10.01.14
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-625191/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- count 函式原始碼分析函式原始碼
- 解析Count函式函式
- std::count 函式函式
- PHP 每日一函式 — 字串函式 count_chars ()PHP函式字串
- Oracle分析函式之開窗函式over()詳解Oracle函式
- 關於count函式的理解函式
- 淺談php count()函式方法PHP函式
- Python 擴充之特殊函式(lambda 函式,map 函式,filter 函式,reduce 函式)Python函式Filter
- MySQL中count(*)函式原理詳解MySql函式
- Kotlin之“with”函式和“apply”函式Kotlin函式APP
- Oracle分析函式與視窗函式Oracle函式
- 常見函式之單行函式函式
- golang count 單字元 字串 統計函式Golang字元字串函式
- 理解 PostgreSQL 的 count 函式的行為SQL函式
- PHP函式漏洞審計之addslashes函式-PHP函式
- ORALCE函式:LAG()和LEAD() 分析函式詳解函式
- MySQL函式大全(字串函式,數學函式,日期函式,系統級函式,聚合函式)MySql函式字串
- python中id()函式、zip()函式、map()函式、lamda函式Python函式
- 函式的祕密之 函式返回值函式
- 從settTimeout到匿名函式、箭頭函式之() => {}函式
- Python之operator.itemgetter函式和sorted函式Python函式
- 【Spark篇】---SparkSql之UDF函式和UDAF函式SparkSQL函式
- redux原始碼分析之四:compose函式Redux原始碼函式
- Hive之分析函式Hive函式
- MySQL(四)日期函式 NULL函式 字串函式MySql函式Null字串
- 第7章 IF函式 COUNTIF函式 SUMIF函式函式
- (譯) 函式式 JS #2: 函式!函式JS
- (未完成)APC函式的執行,分析 KiDeliverApc 函式函式IDE
- linux之__setup函式Linux函式
- Python之函式5.1Python函式
- 函式之遞迴函式遞迴
- 核函式 多項式核函式 高斯核函式(常用)函式
- 第 8 節:函式-匿名函式、遞迴函式函式遞迴
- lambda匿名函式sorted排序函式filter過濾函式map對映函式函式排序Filter
- 測開之函式進階· 第2篇《純函式》函式
- 測開之函式進階· 第5篇《偏函式》函式
- 測開之函式進階· 第4篇《匿名函式》函式
- PHP函式之parse_str()和parse_url()函式PHP函式
- 非同步操作系列之Generator函式與Async函式非同步函式