oracle資料分組

賀滿發表於2014-02-18

一,什麼是分組函式

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

二,分組函式型別

Avg ,count,max,min,stddev(標準方差),sum。

函式名稱

函式描述

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子句。不管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;

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;

 

 

原文:http://blog.csdn.net/java958199586/article/details/7350723

相關文章