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

SQL 聚合函數深度解析:SUM 與 COUNT 的本質區別與應用場景

     編輯:MySQL 資料庫相關知識

核心定義對比

函數核心含義處理對象NULL 值處理
SUM對符合條件記錄的數值列求和數值類型列自動忽略 NULL
COUNT對符合條件的結果行數/非NULL值個數計數任意類型列/行COUNT(列)忽略NULL;COUNT(*)計算行數含NULL

直觀示例

假設表 fruit:

id | name  | price
---|-------|------
1  | apple | 3.00
2  | pear  | 4.00
  • SELECT COUNT(price) FROM fruit; → 2(兩條記錄,price 均非 NULL)
  • SELECT SUM(price) FROM fruit; → 7.00(3.00 + 4.00)

關鍵差異場景

場景一:含 NULL 值

INSERT INTO fruit VALUES (3, 'banana', NULL);

SELECT COUNT(price) FROM fruit;  -- 2(忽略NULL)
SELECT COUNT(*) FROM fruit;      -- 3(計算行數)
SELECT SUM(price) FROM fruit;    -- 7.00(忽略NULL)

場景二:條件過濾

SELECT COUNT(*) FROM fruit WHERE price > 3.5;  -- 1(僅pear)
SELECT SUM(price) FROM fruit WHERE price > 3.5; -- 4.00

場景三:分組統計

SELECT category, COUNT(*) AS cnt, SUM(amount) AS total
FROM orders
GROUP BY category;

進階用法

  • COUNT(DISTINCT column):去重計數
  • SUM(CASE WHEN condition THEN 1 ELSE 0 END):條件計數(等價於 COUNT 的條件形式)
  • SUM() OVER (PARTITION BY ...):窗口函數累加和

性能提示

  • COUNT(*) 在 MyISAM 中極快(元數據直接返回),InnoDB 需掃描
  • SUM 需讀取數值列,配合索引覆蓋查詢可避免回表
  • 大表統計建議使用近似算法或物化視圖預計算
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved