oracle總結之四———分組函數____靜態函數

來源:互聯網
上載者:User

分組函數的介紹

分組函數作用於一組資料,並對一組資料返回一個值.

常見的分組函數有:

函數名稱

函數描述

Count

返回找到的記錄數

Min

返回一個數字列或計算資料行的最小值

Max

返回一個數字列或計算資料行的最大值

Sum

返回一個數字列或計算資料行總和

avg

返回一個數字列或計算資料行的平均值

分組函數的文法:

SELECT [column,] group_function(column), ... 

FROM table 

[WHERE condition]

[GROUP BY column]

[ORDER BY column];

//返回總記錄數   //* 代表的是:一條記錄

SQL> select count(*) from emp;

//返回comm不為空白的總記錄數

SQL> select count(comm) from emp;

//COUNT(DISTINCT expr) 返回 expr非空且不重複的記錄總數 

SQL> select count(distinct(sal)) from emp;

注意:組函數忽略空值。

//返回所有員工的平均工資   

SQL> select avg(nvl(sal,0)) from emp;

注意:NVL函數使分組函數無法忽略空值

//返回員工編號最小值   

SQL> select min(empno) from emp;

//返回員工工資最大值

SQL> select max(sal) from emp;

//求該月本公司發出的工資總額

SQL> select sum(comm)+sum(sal) from emp;

SQL> select sum(nvl(sal,0)+nvl(comm,0)) from emp;

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;

非法使用組函數

1、 所用包含於SELECT 列表中,而未包含於組函數中的列都必須包含於 GROUP BY 子句中。

舉例:

SQL> select empno,count(job) from emp;

正確寫法如下:

SQL> select empno,count(job) from emp group by empno;

2、 不能在 WHERE 子句中使用組函數(注意)。

SQL> select deptno from emp where count(job)>0 group by deptno;

備忘:ORA-00934: 此處不允許使用分組函數

Having 子句

    HAVING 子句對 GROUP BY 子句設定條件的方式與 WHERE 子句和 SELECT 語句互動的方式類似。WHERE 子句搜尋條件在進行分組操作之前應用;而 HAVING 搜尋條件在進行分組操作之後應用。HAVING 文法與 WHERE 文法類似,但 HAVING 可以包含彙總函式。HAVING 子句可以引用挑選清單中出現的任意項。

備忘:having子句通常與group by子句結合使用

文法:

SELECT column, group_function 

FROM table 

[WHERE condition]

[GROUP BY group_by_expression] 

[HAVING group_condition]

[ORDER BY column]; 

//查詢部門的員工人數大於五部門編號

SQL> select deptno,count(*) from emp group by deptno having count(*)>5;

備忘:分組函數可以嵌套

總結:整個查詢語句的文法格式如下:

SELECT

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.