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

SQL HAVING 子句用法詳解:對彙總結果設定篩選條件

     編輯:關於SqlServer

語法結構

SELECT column_name1, aggregate_function(column_name2)
FROM table_name
[WHERE row_level_condition]
[GROUP BY column_name1]
HAVING aggregate_function_condition;

關鍵差異:WHERE vs HAVING

子句作用階段可用運算元典型用途
WHERE分組前(列層級)資料欄位、常數、純量函數過濾原始列
HAVING分組後(群組層級)彙總函數(SUM, COUNT, AVG...)、GROUP BY 欄位過濾群組統計結果

範例:查詢銷售總額超過 1500 的店鋪

表 Store_Information (store_name, sales)

SELECT store_name, SUM(sales) AS total_sales
FROM Store_Information
GROUP BY store_name
HAVING SUM(sales) > 1500;

結果:

store_name    total_sales
Los Angeles   1800

進階用法

  • 多條件:HAVING SUM(sales) > 1000 AND COUNT(*) > 5
  • 搭配 WHERE:先用 WHERE 過濾列(如特定年份),再 GROUP BY,最後 HAVING 過濾群組。
  • 無 GROUP BY 時:整張表視為單一群組,HAVING 等同對全表彙總結果篩選(罕見)。

效能提示

  • 儘量在 WHERE 盡早過濾列,減少參與分組的資料量。
  • 分組欄位建立索引可加速 GROUP BY 排序/雜湊。
  • 避免在 HAVING 使用複雜純量子查詢,考慮改用 CTE/臨時表預先計算。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved