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

SQL Server 統計彙總函數實戰:AVG、COUNT、SUM、MIN、MAX 核心用法與 GROUP BY 進階技巧

     編輯:關於SqlServer

統計彙總函數 (Aggregate Functions) 是商業智慧查詢的核心,將明細資料轉化為決策指標。掌握 AVG、COUNT、SUM、MIN、MAX 的語法細節、NULL 處理、與 GROUP BY 進階搭配,是撰寫高效報表查詢的關鍵。

五大核心彙總函數語法與行為

函數功能適用型別NULL 處理回傳型別
AVG(expr)算術平均數值型忽略 NULL輸入型別衍生 (int→decimal, float→float)
COUNT(expr)非 NULL 計數所有型別忽略 NULLint
COUNT(*)列計數 (含 NULL)所有型別包含 NULLint
SUM(expr)加總數值型忽略 NULL輸入型別衍生
MIN/MAX(expr)最小/最大值可排序型別忽略 NULL輸入型別

統計函數表

基本語法架構

SELECT [ALL | DISTINCT] 彙總函數(運算式) [, ...]
FROM 資料表
[WHERE 條件]
[GROUP BY 分組運算式 [, ...]]
[HAVING 群組條件];

提醒: 運算式必須置於括號內,多個引數以逗號分隔。

經典範例:部門薪資分析

AVG 語法

範例 4-26 查詢

範例 4-26 結果

範例 4-26 結果續

-- 範例 4-26: 求各部門平均薪資
SELECT dept_id, AVG(salary) AS avg_salary
FROM employees
GROUP BY dept_id
ORDER BY avg_salary DESC;

COUNT 變體與效能差異

COUNT 語法

範例 4-27

-- 範例 4-27: 計算部門數目
SELECT COUNT(DISTINCT dept_id) AS dept_count FROM employees;  -- 去重計數
SELECT COUNT(*) FROM employees;                                -- 總列數 (最快)
SELECT COUNT(manager_id) FROM employees;                       -- 有主管的員工數

進階 GROUP BY 技巧

技巧語法應用場景
多層分組GROUP BY dept_id, job_id部門-職稱雙維度薪資分析
ROLLUPGROUP BY ROLLUP(dept_id, job_id)產生小計/總計列 (層級彙總)
CUBEGROUP BY CUBE(dept_id, job_id)所有維度組合彙總 (交叉表)
GROUPING SETSGROUP BY GROUPING SETS((dept_id),(job_id),())自訂彙總組合,比 CUBE/ROLLUP 彈性
GROUPING()SELECT GROUPING(dept_id) AS is_subtotal識別彙總列來源,格式化報表標籤

效能優化建議

  • 彙總前先用 WHERE 過濾,減少參與運算的列數。
  • 大量資料分組考慮 INDEX (group_col, agg_col) 覆蓋索引,避免 Table Scan + Hash Aggregate。
  • COUNT(*) 最快 (僅掃描行數),COUNT(col) 需檢查 NULL,COUNT(DISTINCT col) 最慢 (需排序/雜湊去重)。
  • 避免在彙總運算式中使用純量函數 (如 AVG(dbo.fn_Calc(x))),改用 CROSS APPLY 或預先計算持久化欄位。

統計函數看似基礎,但結合 GROUP BY 進階語法、窗格函數 (OVER())、近似彙總 (APPROX_COUNT_DISTINCT SQL 2019+) 能解決從操作報表到即時儀表板的多樣化分析需求。

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