☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
sql 初學

聚合函數 COUNT、SUM、AVG

什麼是聚合函數?

比喻:聚合函數就像統計老師 👨‍🏫

班上 30 個學生的成績單攤開在桌上, 統計老師幫你算「有幾個人」、「平均幾分」、「最高幾分」—— 這就是聚合函數在做的事。

聚合函數會把多筆資料算成一個結果


COUNT — 計算筆數

-- 計算學生總人數
SELECT COUNT(*) AS 學生人數     -- ← COUNT(*) 計算所有列
FROM Students;
-- 結果:30
-- 計算有填 Email 的學生數
SELECT COUNT(Email) AS 有Email人數  -- ← COUNT(欄位) 不計 NULL
FROM Students;
-- 如果有 5 人沒填 Email → 結果:25

-- 計算有幾種不同的年齡
SELECT COUNT(DISTINCT Age) AS 年齡種類數
FROM Students;
-- 如果有 20, 21, 22 三種 → 結果:3

逐行解析:

COUNT(*)           -- 計算所有列數(包含 NULL)
COUNT(Email)       -- 計算 Email 不是 NULL 的列數
COUNT(DISTINCT Age) -- 先去重複,再計算有幾種

SUM — 加總

-- 全班分數總和
SELECT SUM(Score) AS 分數總和
FROM Students;

-- 及格學生的分數總和
SELECT SUM(Score) AS 及格分數總和
FROM Students
WHERE Score >= 60;

⚠️ SUM 只能用在數字欄位。用在字串上會出錯。


AVG — 平均

-- 全班平均分數
SELECT AVG(Score) AS 平均分         -- ← 自動計算:SUM / COUNT
FROM Students;

-- 四捨五入到小數第 2 位
SELECT ROUND(AVG(Score), 2) AS 平均分
FROM Students;

MAX / MIN — 最大最小值

-- 最高分和最低分
SELECT MAX(Score) AS 最高分,        -- ← 全班最高分
       MIN(Score) AS 最低分         -- ← 全班最低分
FROM Students;

-- 也可以用在日期
SELECT MAX(CreatedAt) AS 最新註冊時間,
       MIN(CreatedAt) AS 最早註冊時間
FROM Students;

-- 也可以用在字串(按字母順序)
SELECT MAX(Name) AS 最後名字,       -- 字母排序最後的
       MIN(Name) AS 最前名字        -- 字母排序最前的
FROM Students;

組合使用

-- 一次看所有統計資料
SELECT
    COUNT(*) AS 總人數,
    SUM(Score) AS 分數總和,
    ROUND(AVG(Score), 2) AS 平均分,
    MAX(Score) AS 最高分,
    MIN(Score) AS 最低分,
    MAX(Score) - MIN(Score) AS 分數差距   -- ← 可以做運算
FROM Students;

結果:

 總人數 | 分數總和 | 平均分 | 最高分 | 最低分 | 分數差距
-------+---------+-------+-------+-------+---------
    30 |    2250 | 75.00 |    98 |    32 |      66

搭配 WHERE 使用

-- 統計各個條件下的數據
SELECT COUNT(*) AS 及格人數
FROM Students
WHERE Score >= 60;

SELECT AVG(Score) AS 女生平均分
FROM Students
WHERE Gender = '女';

SELECT MAX(Age) AS 最大年齡
FROM Students
WHERE Department = '資工系';

小結

函數 用途 NULL 處理
COUNT(*) 計算總列數 包含 NULL
COUNT(col) 計算非空列數 忽略 NULL
SUM(col) 加總 忽略 NULL
AVG(col) 平均 忽略 NULL
MAX(col) 最大值 忽略 NULL
MIN(col) 最小值 忽略 NULL

💡 下一章學 GROUP BY,讓聚合函數發揮真正威力!

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊