程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 分組統計查詢(學習筆記),分組學習筆記

分組統計查詢(學習筆記),分組學習筆記

編輯:Oracle教程

分組統計查詢(學習筆記),分組學習筆記


查詢出公司每個月支出的工資總和

--查詢出公司每個月支出的工資總和
SELECT SUM(sal) FROM emp;

查詢出公司的最高工資,最低工資和平均工資

--查詢出公司的最高工資,最低工資和平均工資
SELECT MAX(sal),MIN(sal),ROUND(AVG(sal),2) FROM emp;

統計出公司最早雇傭和最晚雇傭的雇傭日期

--統計出公司最早雇傭和最晚雇傭的雇傭日期
SELECT MIN(hiredate) 最早雇傭日期 , MAX(hiredate) 最晚雇傭日期 FROM emp ;

統計公司工資之中中間的工資值

--統計公司工資之中中間的工資值
SELECT MEDIAN(sal) FROM emp ;

驗證COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的使用區別

--驗證COUNT(*)、COUNT(字段)、COUNT(DISTINCT 字段)的使用區別
SELECT COUNT(*) , COUNT(ename) , COUNT(comm) , COUNT(DISTINCT job) FROM emp ;

 

分組統計語法
SELECT [DISTINCT]  分組字段 [AS] [列別名] ,... | 統計函數 [AS] [別名] , ….
    FROM 表名稱1 [表別名1] , 表名稱2 [表別名2] ….
    [WHERE 條件(s)] 
    [GROUP BY 分組字段]
    [ORDER BY 排序字段 ASC|DESC] ;
 

 

單字段分組統計

統計出每個部門的人數
--統計出每個部門的人數
SELECT COUNT(empno) 
FROM emp
GROUP BY deptno; 

 統計出每種職位的最低、最高工資

--統計出每種職位的最低、最高工資
SELECT job,MIN(sal) 最低工資,MAX(sal) 最高工資
FROM emp 
GROUP BY job;

查詢出每個部門的名稱,部門人數,部門平均工資,平均服務年限

--查詢出每個部門的名稱,部門人數,部門平均工資,平均服務年限
SELECT d.dname,COUNT(e.empno),ROUND (AVG(e.sal),2),ROUND(AVG (months_between(SYSDATE,e.hiredate)/12),2)
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.dname;

查詢出公司各個工資等級雇員的數量、平均工資。

--查詢出公司各個工資等級雇員的數量、平均工資。
SELECT s.grade,COUNT(e.empno),ROUND (AVG(e.sal),2)
FROM emp e,salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
GROUP BY s.grade;

統計領取傭金與不領取傭金的員工的平均工資,平均入職年限,員工人數

--統計領取傭金與不領取傭金的員工的平均工資,平均入職年限,員工人數--comm是空內容不能直接分組,用集合來完成
SELECT ROUND(AVG(e.sal),2),ROUND(AVG(months_between(SYSDATE,e.hiredate)/12),2),COUNT(e.empno)
FROM emp e
WHERE e.comm IS NULL
UNION 
SELECT ROUND(AVG(e.sal),2),ROUND(AVG(months_between(SYSDATE,e.hiredate)/12),2),COUNT(e.empno)
FROM emp e
WHERE e.comm IS NOT NULL;

多字段分組統計

--語法
SELECT [DISTINCT]  分組字段1 [AS] [列別名] , [分組字段2 [AS] [列別名] , …] | 統計函數 [AS] [別名] , ….
    FROM 表名稱1 [表別名1] , 表名稱2 [表別名2] ….
    [WHERE 條件(s)] 
    [GROUP BY 分組字段1 , 分組字段2 , ….]
    [ORDER BY 排序字段 ASC|DESC] ;
現在要求查詢出每個部門的詳細信息
--現在要求查詢出每個部門的詳細信息,部門編號,部門名稱,部門位置,部門人數,平均工資,總工資,最高、最低工資
SELECT d.deptno,d.dname,d.loc,COUNT(e.empno),AVG(e.sal),SUM(sal),MAX(sal),MIN(sal)
FROM dept d,emp e
WHERE d.deptno=e.deptno(+)
GROUP BY d.deptno,d.dname,d.loc;

HAVING子句

      使用GROUP BY子句可以實現數據的分組顯示,但是在很多時候往往需要對分組之後的數據進行再次的過濾, 而後再通過統計結果進行數據的過濾,而要想實現這樣的功能就只能通過HAVING子句完成。 語法:
SELECT [DISTINCT]  分組字段1 [AS] [列別名] , [分組字段2 [AS] [列別名] , …] | 統計函數 [AS] [別名] , ….
    FROM 表名稱1 [表別名1] , 表名稱2 [表別名2] ….
    [WHERE 條件(s)] 
    [GROUP BY 分組字段1 , 分組字段2 , ….]
    [HAVING 過濾條件(s)]
    [ORDER BY 排序字段 ASC|DESC] ;
查詢出所有平均工資大於2000的職位信息、平均工資、雇員人數
--查詢出所有平均工資大於2000的職位信息、平均工資、雇員人數
SELECT e.job,AVG(e.sal),COUNT(e.empno)
FROM emp e
GROUP BY e.job
HAVING AVG(e.sal)>2000;
列出至少有一個員工的所有部門編號、名稱,並統計出這些部門的平均工資、最低工資、最高工資。
--列出至少有一個員工的所有部門編號、名稱,並統計出這些部門的平均工資、最低工資、最高工資。
SELECT d.deptno,d.dname,AVG(e.sal) avgsal,MIN(e.sal),MAX(e.sal),COUNT(e.empno) 人數
FROM emp e,dept d
WHERE e.deptno(+)=d.deptno
GROUP BY d.deptno,d.dname
HAVING COUNT(e.empno)>0;

顯示非銷售人員工作名稱以及從事同一工作雇員的月工資的總和,
並且要滿足從事同一工作的雇員的月工資合計大於$5000,輸出結果按月工資的合計升序排列

 
--顯示非銷售人員工作名稱以及從事同一工作雇員的月工資的總和,
--並且要滿足從事同一工作的雇員的月工資合計大於$5000,輸出結果按月工資的合計升序排列
SELECT e.job,SUM(e.sal) sumsal
FROM emp e
WHERE e.job<>'SALESMAN' 
GROUP BY e.job
HAVING SUM(e.sal)>5000
ORDER BY sumsal ASC;
HAVING子句是在分組之後使用,主要是為了針對分組的結果進行過濾  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved