oracle 分組查詢
常用的函數:
·:統計個數:COUNT(),根據表中的實際數據量返回結果;
·:求和:SUM(),是針對於數字的統計,求和
·:平均值:AVG(),各種數據類型都支持
·:最大值:MAX(),各種數據類型都支持
·:最小值:MIN(),求出最小值
範例:驗證各個函數:
select count(*) 人數,AVG(sal)員工平均工資,SUM(sal)每月總支出,
max(sal) 最高工資,min(sal)最低工資
from scott.emp;
範例:統計出公司的平均雇用年限
select avg(months_between(sysdate,hiredate)/12) from scott.emp;
範例:求出最早和最晚的雇傭日期
select max(hiredate)最晚,min(hiredate)最早 from scott.emp;
以上的幾個操作函數,在表中沒有數據的時候,只有CIUNT()函數會返回結果,其他都是NULL;
範例:統計bonus表
select count(*) 人數,AVG(sal)員工平均工資,SUM(sal)每月總支出,
max(sal) 最高工資,min(sal)最低工資
from bonus;
實際上針對於count()函數有三種使用形式;
·count(*):可以準確的說返回表中的全部記錄數;
·count(字段):統計不為null的所有數據量;
·connt(DISTINCT 字段);消除重復之後的結果;
範例:統計查詢一
select count(*),count(empno),count(comm) from scott.emp;
統計查詢二:
select count (DISTINCT job) from scott.emp;
5-2:分組統計
範例:根據部門編號分組、查詢出每個部門的編號、人數、平均工資。
select count(deptno) 編號,count(*),Avg(sal)
from scott.emp
group by deptno;
範例:根據職位分組,統計出每個職位的人數,最低工資與最高工資。
select job,count(*),min(sal),MAX(sal)
from scott.emp
group by job;
5-3:多表查詢與分組統計
範例:查詢出每個部門的名稱、部門人數、平均工資。
確定要使用的數據表
dept表:部門名稱
emp表:統計數據
確定已知的關聯字段
雇員與部門:scott.emp.deptno=scott.dept.deptno
第一步:換個思路,查詢出每個部門的名稱,雇員編號(count(empno))、基本工資(AVG(sal))
select d.ename,e.empno,e.sal
from scott.emp e,scott.emp d
where e.deptno=d.deptno;
第二步:
select d.ename,count(e.empno),AVG(e.sal)
from scott.emp e,scott.emp d
where e.deptno=d.deptno
group by d.dname;
第三部:外連接
select d.dname,count(e.empno),AVG(e.sal)
from scott.emp e,scott.emp d
where e.deptno(+)=d.deptno
group by d.ename;
範例:查詢每個部門的編號、名稱、位置、部門人數、平均工資;
確定要使用的數據表
dept表:編號、名稱、位置
emp表:統計信息
確定已知的關聯字段
雇員與部門:scott.emp.deptno=scott.dept.deptno
select d.deptno,d.dname,d.loc,e.empno,e.sal
from scott.emp e, scott.dept d
where e.deptno(+)=d.deptno;
第二步:此時發現有三個列(dept表)同事發生著重復,呢麽就可以進行多字段分組。
select d.deptno,d.dname,d.loc,count(e.empno),avg(e.sal)
from scott.emp e, scott.dept d
where e.deptno(+)=d.deptno
group by d.deptno,d.dname,d.loc;
oracle 分組查詢