SQL:HAVING 與 WHERE – 過濾聚合資料
本文示範了 SQL 中 WHERE
和 HAVING
子句之間的主要區別,特別是在處理聚合資料時。 我們將使用尋找最專業的講師的範例。 單獨的 WHERE
子句不足以完成此任務; HAVING
子句是必要的。
了解差異
WHERE
子句在 分組發生之前 過濾各個行。 它將條件應用於表中的各個記錄。 相反,HAVING
子句在 分組之後過濾 ,對 COUNT
、SUM
、AVG
和 MIN
等聚合函數進行操作。 這在基於聚合結果進行過濾時至關重要,如我們的講師專業化範例中所示。
最佳實務
為了清晰和高效,一般規則是在 WHERE
之前使用 GROUP BY
,在 HAVING
之後使用 GROUP BY
。這種方法簡化了查詢建構並提高了可讀性。
最佳化查詢
以下查詢使用 ANSI 連接和 HAVING
子句來有效識別具有最大專業化數量的講師:
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
此修改後的查詢不再需要 WHERE
子句作為 theta 連接條件,從而實現更簡化和高效的查詢。
以上是WHERE 與 HAVING:何時應該使用每個子句來尋找聚合資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!