分組函數
通過今天學習分組函數,我們有以下的學習內容。
1、 什麼是分組函數。
答:分組函數作用於一組資料,並對一組資料返回一個值。
2、 常見的分組函數有:
| 函數名稱 |
函數描述 |
| Count |
返回找到的記錄數 |
| Min |
返回一個數字列或計算資料行的最小值 |
| Max |
返回一個數字列或計算資料行的最大值 |
| Sum |
返回一個數字列或計算資料行總和 |
| avg |
返回一個數字列或計算資料行的平均值 |
3、 avg(平均值)和sum(合計)函數
案例:SQL> select avg(sal),sum(sal) from emp;
4、 min(最小值)和max(最大值)函數
案例:SQL> select min(sal),max(sal) from emp;
5、 count(計數)函數
案例:SQL> select count(ename) from emp;
6、 distenct關鍵字:去掉重複的。
7、 分組資料:group by 子句文法
Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。它的作用是通過一定的規則將一個資料集劃分成若干個小的地區,然後針對若干個小地區進行資料處理。 如果在查詢的過程中需要按某一列的值進行分組,以統計該組內資料的資訊時,就要使用group by子句。不管select是否使用了where子句都可以使用group by子句。
注意:group by子句一定要與分組函數結合使用,否則沒有意義。
案例:
//求出每個部門的員工人數
SQL> select deptno,count(*) as "人數" from emp group by deptno;
//求出每個部門的員工的平均工資
SQL> select deptno,avg(nvl(sal,0)) from emp group by deptno;
//注意:group by 子句中的列不必包含在SELECT 列表中
SQL> select avg(nvl(sal,0)) from emp group by deptno;
//求出某個部門中相同職位的員工人數 group by 後可以跟多個分組的欄位
SQL> select deptno,job,count(*) from emp group by deptno,job order by deptno;
8、 非法使用組函數
(1) 不能再where子句中使用組函數(注意。)
SQL> select deptno from emp where count(job)>0 group by deptno;
備忘:ORA-00934: 此處不允許使用分組函數
(2) 可以在having子句中使用組函數
9、 過濾分組:having子句
使用having過濾分組:
(1) 行已經被分組
(2) 使用了組函數
(3) 滿足having子句中條件的分組將被顯示
AVING 子句對 GROUP BY 子句設定條件的方式與 WHERE 子句和 SELECT 語句互動的方式類似。WHERE 子句搜尋條件在進行分組操作之前應用;而 HAVING 搜尋條件在進行分組操作之後應用。HAVING 文法與 WHERE 文法類似,但 HAVING 可以包含彙總函式。HAVING 子句可以引用挑選清單中出現的任意項。
備忘:having子句通常與group by子句結合使用
案例:
//查詢部門的員工人數大於五部門編號
SQL> select deptno,count(*) from emp group by deptno having count(*)>5;
10、 嵌套函數
(1)函數可以嵌套。一個函數的輸出可以是另一個函數的輸入。運算元有一個可繼承的執行過程。但函數的優先權只是基於位置,函數遵循由內到外,由左到右的原則.
(2)嵌套函數可以包括在組函數中嵌套單行函數,或者組函數嵌套入單行函數或組函數中