首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL HAVING 子句分組篩選完整指南

     編輯:MySQL 資料庫相關知識

WHERE vs HAVING 核心區別

特性WHEREHAVING
執行階段分組前,過濾輸入行分組後,過濾分組結果
可用聚合函數不可可(如 SUM、COUNT)
典型位置GROUP BY 之前GROUP BY 之後

實戰範例

範例 1:基本分組聚合

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region;

範例 2:HAVING 篩選聚合結果

SELECT region, SUM(population), SUM(area)
FROM bbc
GROUP BY region
HAVING SUM(area) > 1000000;

此處無法用 WHERE,因表中無單行面積超百萬的記錄,需先分組聚合後再篩選。

範例 3:查找重複記錄

SELECT uid, email, COUNT(*) AS ct
FROM edm_user081217
GROUP BY email
HAVING ct > 1;

先按 email 分組,再用 HAVING 過濾計數 > 1 的組,精準定位重複郵箱。

字符長度判斷技巧

SELECT home_page FROM aaa
WHERE CHAR_LENGTH(TRIM(home_page)) > 1;

性能建議

  • 能用 WHERE 解決的條件盡量前置,減少參與分組的行數
  • HAVING 僅用於必須聚合後才能判斷的條件
  • 避免在 HAVING 中使用非聚合條件,轉移到 WHERE 更高效

總結

HAVING 是分組後的篩選器,配合聚合函數解決 WHERE 無法處理的「組級」過濾問題。記住:WHERE 過濾行,HAVING 過濾組。

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