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

SQL HAVING 子句深度解析:分組後的篩選利器

     編輯:關於SqlServer

HAVING vs WHERE:核心區別

特性WHEREHAVING
作用階段分組前(行級過濾)分組後(組級過濾)
可用聚合函數不可可(如 AVG()、COUNT())
典型場景原始數據篩選統計結果篩選

語法結構

SELECT column1, AGG_FUNC(column2)
FROM table_name
GROUP BY column1
HAVING aggregate_condition;

實戰案例:部門平均薪資篩選

-- 1. 查詢各部門平均薪資
SELECT dept, AVG(salary) AS avg_sal
FROM employee
GROUP BY dept;

-- 2. 僅保留平均薪資 > 20000 的部門
SELECT dept, AVG(salary) AS avg_sal
FROM employee
GROUP BY dept
HAVING AVG(salary) > 20000;

第 2 步若改用 WHERE AVG(salary) > 20000 會報錯,因為聚合函數不可用於 WHERE。

進階用法

  • 多條件組合:HAVING COUNT(*) > 5 AND AVG(salary) > 50000
  • 搭配窗口函數:現代 SQL 可用 QUALIFY(部分資料庫支援)替代 HAVING
  • 性能提示:先用 WHERE 過濾掉不需要的行,再 GROUP BY,最後 HAVING,減少分組運算量
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved