group by 分組數據后,having 子句針對分組進行過濾,僅保留符合條件的分組。二者結合用于分組數據、聚合數據、過濾分組、分析數據,查找模式趨勢,匯總信息和創建統計報告。
MySQL 中 GROUP BY 和 HAVING 子句的關系
GROUP BY 子句
將相同行分組到一起,形成一個分組集合。
用于對數據進行聚合操作,如 SUM()、COUNT()、AVG() 等。
HAVING 子句只能在 GROUP BY 子句之后使用。
HAVING 子句
對分組后的數據進行過濾,僅保留符合特定條件的分組。
HAVING 子句必須引用 GROUP BY 中的分組列或聚合函數。
兩者之間的關系
GROUP BY 子句定義分組方式,而 HAVING 子句則指定分組后的過濾條件。這兩個子句的組合允許對數據進行以下操作:
分組數據
對分組進行聚合
過濾不符合條件的分組
示例
<code class="sql">SELECT department_id, SUM(salary) FROM employee GROUP BY department_id HAVING SUM(salary) > 10000;</code>
登錄后復制
該查詢首先將員工按部門編號 (department_id) 分組。
然后,它計算每個部門的工資總和。
最后,HAVING 子句僅保留工資總和超過 10000 的部門。
使用場景
GROUP BY 和 HAVING 子句經常在以下情況下使用:
分析具有多個數據集的數據
查找模式和趨勢
過濾和匯總特定信息
創建統計報告