sql 中,having 用于過濾分組后的數據,基于組的數據;where 用于過濾單行數據,基于單行數據。同時使用它們時,where 過濾單行數據,having 過濾分組后的數據。示例:where 過濾單行工資超過 50000 的員工,having 過濾分組后員工數超過 5 人的部門。
SQL 中 HAVING 和 WHERE 條款的協同使用
HAVING 和 WHERE 是 SQL 中兩個關鍵條款,可用于過濾查詢結果。雖然它們都用于篩選數據,但它們的作用和目標不同。
什么時候使用 WHERE?
用于過濾表中的行,基于單行的數據。
在子查詢中,WHERE 用于過濾來自其他表的行。
可以在任何查詢位置使用 WHERE,無論是否使用聚合函數。
什么時候使用 HAVING?
用于過濾分組后的數據,基于組的數據。
只能在聚合查詢中使用 HAVING,即使用 GROUP BY 語句。
必須在 GROUP BY 之后立即使用 HAVING。
可以同時使用 HAVING 和 WHERE 嗎?
是的,HAVING 和 WHERE 可以同時使用。它們以不同的方式過濾數據,可以組合使用以進一步細化結果。
如何同時使用 HAVING 和 WHERE?
要在 SQL 查詢中同時使用 HAVING 和 WHERE,只需在 SELECT 語句中包含這兩個條款:
<code class="sql">SELECT ... FROM ... WHERE GROUP BY ... HAVING </code>
登錄后復制
示例:
<code class="sql">SELECT department_id, COUNT(*) AS employees FROM employees WHERE salary > 50000 -- 使用 WHERE 過濾單行 GROUP BY department_id HAVING COUNT(*) >= 5 -- 使用 HAVING 過濾分組后的行</code>
登錄后復制
這個查詢將返回部門 ID 和屬于該部門的員工數超過 5 人的部門。
注意:
HAVING 條款只能引用聚合函數的結果(例如,COUNT()、SUM()、AVG())。
HAVING 條款的位置很重要。它必須在 GROUP BY 語句之后立即出現。否則,查詢可能會返回不正確的結果。