首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 常用群組函數與分組查詢實戰:MAX、MIN、AVG、SUM、COUNT、GROUP BY、HAVING 詳解

     編輯:Oracle 教學

Oracle 群組函數與分組查詢實戰

群組函數對一組資料列運算回傳單一結果,常用於統計報表。本文涵蓋五大核心函數、GROUP BY 分組規則、HAVING 過濾分組、巢狀群組函數應用。

一、五大核心群組函數

函數功能資料型別要求忽略 NULL
MAX(col)最大值任意是
MIN(col)最小值任意是
AVG(col)平均值NUMBER是
SUM(col)總和NUMBER是
COUNT(col)非 NULL 筆數任意是
COUNT(*)總筆數 (含 NULL)任意否
COUNT(DISTINCT expr)非重複非 NULL 筆數任意是

二、GROUP BY 分組規則

  • SELECT 清單中未包含在群組函數的欄位,必須出現在 GROUP BY 中。
  • GROUP BY 中的欄位不一定要出現在 SELECT 清單。
  • 不可在 WHERE 子句使用群組函數(需用 HAVING)。

範例

SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id;

三、HAVING 過濾分組

  • 先分組,再套用群組函數條件,符合者顯示。
  • 可與 WHERE 共用:WHERE 先過濾列,HAVING 再過濾群組。
SELECT department_id, COUNT(*)
FROM employees
WHERE hire_date > '2020-01-01'
GROUP BY department_id
HAVING COUNT(*) > 5;

四、群組函數巢狀應用

單層巢狀:MAX(AVG(salary)) 先按部門算平均薪資,再取最大者。

SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;

五、常見錯誤與注意事項

  • ORA-00937:SELECT 含非群組函數欄位但未 GROUP BY。
  • ORA-00934:WHERE 使用群組函數 → 改用 HAVING。
  • 群組函數自動忽略 NULL,COUNT(*) 例外。
  • AVG、SUM 僅限數值型別。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved