| 函數 | 核心含義 | 處理對象 | 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)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 需讀取數值列,配合索引覆蓋查詢可避免回表