問題:統計部門的名稱,以及對應的人數,
添加到最後一列彙總原始結果,沒有彙總列:
SELECT D.DNAME,COUNT(*) AS 人數 FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
GROUP BY D.DNAME

方法一原理:
兩張表的上下合并Union all,
其中一個表即是原表,還有一個隻有一行彙總表。
我這邊添加一個字段名和原表一樣,但值等于總結,用As語句指派。
SELECT '總計' AS DNAME,COUNT(DISTINCT EMPNO)from EMP;
結果将兩張表合并一起,
但注意先後順序。
SELECT D.DNAME,COUNT(*) AS 人數 FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
GROUP BY D.DNAME
UNION all
SELECT '總計' AS DNAME,COUNT(DISTINCT EMPNO)from EMP;
方法二原理:
用函數Rollup和Nvl空值轉換。SELECT nvl(D.DNAME,'總計') as DNAME,COUNT(*) AS 人數 FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
GROUP BY rollup(D.DNAME);
Rollup 隻能在Group By語句後面,對特定字段彙總。
以下是單使用Rollup 函數的情況。
有點像Excel工具的
分類彙總,按某個字段,按DNAME部門名稱,不是聚合函數那一部分。SELECT DNAME,COUNT(*) AS 人數 FROM DEPT D
LEFT JOIN EMP E
ON D.DEPTNO = E.DEPTNO
GROUP BY rollup(D.DNAME);
然後再讓空值傳回字元“總計”,這一部分隻需用NVL函數即可。