天天看點

dataframe添加一列并疊代指派_【SQL】 添加彙總行的兩種方法

問題:統計部門的名稱,以及對應的人數,

添加到最後一列彙總

原始結果,沒有彙總列:

SELECT D.DNAME,COUNT(*) AS 人數 FROM DEPT D 
         LEFT JOIN EMP E 
         ON D.DEPTNO = E.DEPTNO 
  GROUP BY D.DNAME
           
dataframe添加一列并疊代指派_【SQL】 添加彙總行的兩種方法

方法一原理:

兩張表的上下合并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;
           
dataframe添加一列并疊代指派_【SQL】 添加彙總行的兩種方法

方法二原理:

用函數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);
           
dataframe添加一列并疊代指派_【SQL】 添加彙總行的兩種方法

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); 
           
dataframe添加一列并疊代指派_【SQL】 添加彙總行的兩種方法

然後再讓空值傳回字元“總計”,這一部分隻需用NVL函數即可。

繼續閱讀