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

MySQL 聚合函數全解析:AVG、COUNT、MAX、MIN、SUM 與 DISTINCT 進階用法

     編輯:MySQL 綜合教學

五大核心聚合函數

函數說明忽略 NULL
AVG(col)平均值✅
COUNT(*)行數 (含 NULL 行)❌ (不忽略)
COUNT(col)非 NULL 個數✅
MAX(col)最大值✅
MIN(col)最小值✅
SUM(col)總和✅

實戰示例

1. AVG() - 平均值

-- 指定供應商商品平均價
SELECT AVG(prd_price) AS avg_price 
FROM products 
WHERE vend_id = 1003;

2. COUNT() - 計數

-- 總行數
SELECT COUNT(*) FROM orders;

-- 有效 email 用戶數
SELECT COUNT(email) FROM users;  -- NULL email 不計入

3. MAX()/MIN() - 極值

-- 最高/最低價商品
SELECT MAX(prod_price) AS max_price, MIN(prod_price) AS min_price
FROM products;

-- 文本列:按排序規則首/尾行
SELECT MAX(name) FROM users;  -- 字典序最後
SELECT MIN(name) FROM users;  -- 字典序最前

4. SUM() - 求和

-- 訂單總商品數量
SELECT SUM(num) AS total_qty FROM order_items WHERE order_id = 123456;

-- 訂單總金額 (表達式求和)
SELECT SUM(item_price * num) AS total_amount FROM order_items WHERE order_id = 123456;

進階:DISTINCT 去重聚合

-- 不同價格的平均值 (去重後平均)
SELECT AVG(DISTINCT prd_price) AS avg_distinct_price
FROM products WHERE vend_id = 1003;

⚠️ `COUNT(DISTINCT col)` 統計非 NULL 不重複值個數;`SUM(DISTINCT col)` 去重後求和 (極少用)。

組合聚合:單查詢多指標

SELECT 
  COUNT(*) AS total_rows,
  MIN(prod_price) AS price_min,
  MAX(prod_price) AS price_max,
  AVG(prod_price) AS price_avg
FROM products;

一次掃描輸出四大核心指標,效能遠優於多次查詢。

關鍵注意點

  1. NULL 語義:聚合函數 (除 `COUNT(*)`) **自動忽略 NULL**,這與數學直覺一致但易誤解。
  2. 非數值列:`MAX/MIN` 可用於文本/日期,按排序規則比較。
  3. 表達式聚合:`SUM(price * qty)` 等運算在聚合**前**逐行計算。
  4. 分組配合:實際多用於 `GROUP BY` 子句,如 `SELECT cat, AVG(price) FROM products GROUP BY cat;`
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved