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

Oracle SUM 與 COUNT 差異解析:彙總函數在 GROUP BY 與 HAVING 中的正確用法

     編輯:Oracle 資料庫基礎

範例資料

ID  NAME  SHU
1   a     3
2   a     4
3   b     5
4   b     7
5   a     (NULL)
6   a     20

常見錯誤:WHERE 中直接使用彙總函數

-- 錯誤
SELECT * FROM aaa WHERE COUNT(name) >= 2 GROUP BY name;
-- ORA-00934: group function is not allowed here

正確寫法:HAVING 子句

-- 查詢出現 2 次以上的 name
SELECT * FROM aaa GROUP BY name HAVING COUNT(name) >= 2;

-- 查詢 SHU 總和大於 10 的使用者
SELECT * FROM aaa GROUP BY name HAVING SUM(SHU) > 10;

HAVING vs WHERE

特性WHEREHAVING
過濾時機分組前(列級)分組後(群組級)
可用彙總函數否是
可用欄位別名視資料庫而定可
最大運算式數無限制40 個(Oracle 限制)

SUM vs COUNT 差異示範

SELECT name, COUNT(shu), SUM(shu)
FROM aaa
GROUP BY name;

結果

NAME  COUNT(SHU)  SUM(SHU)
a     3           27
b     2           12

解析

  • COUNT(shu):僅計算 shu IS NOT NULL 的列數(ID=5 為 NULL 不計入)。
  • SUM(shu):忽略 NULL 值直接相加(3+4+20=27;5+7=12)。
  • COUNT(*):計算所有列數(含 NULL),a 為 4、b 為 2。

結論

  • 求和用 SUM,自動忽略 NULL。
  • 求筆數用 COUNT:COUNT(col) 不計 NULL,COUNT(*) 計總列數。
  • 彙總條件必須寫在 HAVING,不可寫在 WHERE。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved