首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL COUNT() 與 SUM() 差異深度解析:統計不及格科目數的正確姿勢

     編輯:MySQL 資料庫相關知識

針對「查詢 2 門以上不及格學生的平均成績」需求,兩種寫法結果截然不同:

-- 寫法一:正確
SELECT name, SUM(score < 60), AVG(score)
FROM result GROUP BY name
HAVING SUM(score < 60) >= 2;

-- 寫法二:錯誤
SELECT name, COUNT((score < 60) != 0) AS a, AVG(score)
FROM result GROUP BY name
HAVING a >= 2;

核心差異

函數參數為條件運算式時的行為
SUM(expr)將條件運算式視為數值(TRUE=1, FALSE=0)並求和,等同計算符合條件的列數
COUNT(expr)計算運算式結果非 NULL 的列數。(score<60)!=0 結果為 TRUE(1) 或 FALSE(0),皆非 NULL,故統計為總列數,非不及格門數

關鍵知識點

  • COUNT(*) 統計總列數(含 NULL),MyISAM 引擎極快
  • COUNT(column) 統計該欄位非 NULL 列數,常被誤用為統計總數
  • 條件統計必須用 SUM(condition),利用布林值隱性轉換 1/0

實戰建議

需統計「符合條件的筆數」時,一律採用 SUM(condition) 模式;COUNT 僅用於統計非空值或總列數(COUNT(*))。

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