分組統計查詢
2017年11月13日
20:36
統計函數
- 統計個數:COUNT(* | [DISTINCT]字段)
--COUNT(*):明確地返回表中的數據個數,是最準確的。
--COUNT(字段):不統計爲null的數據個數。
--COUNT([DISTINCT]字段):統計消除重複數據後的數據個數。
- MAX(字段)、MIN(字段)
- SUM(字段)、AVG(字段)
分組統計查詢
分組是部分數據具有共性。
分組子句GROUP BY
GROUP BY 分組字段,分組字段
SELECT job,COUNT(empno),AVG(sal)
FROM emp
GROUP BY(job) ;
分組操作存在嚴格的限制
1、在沒有編寫GROUP BY子句的時候,那麼SELECT子句之中只允許出現統計函數,不允許出現任何的其他字段。
錯誤代碼 |
正確代碼 |
SELECT COUNT(empno),ename FROM emp ; |
SELECT COUNT(empno) FROM emp ; |
2、在使用GROUP BY子句分組字段的時候,SELECT子句中只允許出現統計函數和分組字段
SELECT job,COUNT(empno),ename FROM emp GROUP BY job ; |
SELECT job,COUNT(empno) FROM emp GROUP BY job ; |
3、統計函數允許嵌套查詢,但是嵌套後的統計查詢中,SELECT 子句裏面不允許再出現任何的字段,包括分組字段,只能夠使用嵌套的統計函數。
SELECT deptno,MAX(AVG(sal)) FROM emp GROUP BY deptno ; |
SELECT MAX(AVG(sal)) FROM emp GROUP BY deptno ; |
SELECTd.deptno,d.dname,d.loc,COUNT(e.empno),TRUNC(AVG(MONTHS_BETWEEN(SYSDATE,hiredate)/12))year
FROM dept d,emp e
WHERE d.deptno = e.deptno(+)
GROUP BY d.deptno,d.dname,d.loc ;
HAVING子句對分組後的數據篩選
【⑤確定要顯示的數據列】SELECT [DISTINCT] 分組字段[別名],…| 統計函數
【①確定要查找的數據來源】FROM
【②針對數據進行篩選】WHERE 條件
【③針對數據進行分組】GROUP BY 分組字段,分組字段,….
【④對分組後的數據篩選】HAVING 條件
【⑥對返回結果排序】ORDER BY 字段 [ASC | DESC],…,…