首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle SQL GROUP BY 用法與 emp 表 deptno 欄位說明

     編輯:程式設計疑難解答

問題:`emp` 表是否有 `deptno` 欄位?`GROUP BY` 何時使用?

經驗 emp 表結構 (Scott Schema)

EMPNO    NUMBER(4)     -- 員工編號
ENAME    VARCHAR2(10)  -- 姓名
JOB      VARCHAR2(9)   -- 職稱
MGR      NUMBER(4)     -- 主管編號
HIREDATE DATE          -- 到職日期
SAL      NUMBER(7,2)   -- 薪資
COMM     NUMBER(7,2)   -- 獎金
DEPTNO   NUMBER(2)     -- 部門編號  ← 有此欄位

所以 **`emp` 表確實有 `deptno` 欄位**,代表所屬部門代碼 (10=會計, 20=研發, 30=銷售, 40=營運)。

GROUP BY 用途與時機

「將結果集依指定欄位分組,對每組執行彙總函數 (COUNT, SUM, AVG, MAX, MIN...)」

  • **何時用**:`SELECT` 清單包含 **非彙總欄位** 且需對這些欄位分組統計時,必須加 `GROUP BY`。
  • **何時不用**:全表單一彙總 (如 `SELECT COUNT(*) FROM emp`),或 `SELECT` 只有彙總函數。

範例:各部門人數與平均薪資

SELECT deptno, COUNT(*) AS cnt, AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
ORDER BY deptno;

結果:

DEPTNO  CNT  AVG_SAL
10      3    2916.67
20      5    2175.00
30      6    1566.67

進階:HAVING 過濾分組

SELECT deptno, AVG(sal) AS avg_sal
FROM emp
GROUP BY deptno
HAVING AVG(sal) > 2000;  -- 只保留平均薪資 > 2000 的部門

常見錯誤

  • `SELECT deptno, ename FROM emp GROUP BY deptno;` → `ename` 未在 GROUP BY 且非彙總,**報錯 ORA-00979**。
  • 把 `WHERE` 寫在 `GROUP BY` 後 → 語法錯誤,過濾列用 `WHERE`,過濾組用 `HAVING`。

記住:`emp` 有 `deptno`;要分組統計就 `GROUP BY deptno`,再配合彙總函數與 `HAVING` 即可靈活分析部門層級資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved