首頁 >資料庫 >mysql教程 >WHERE 與 HAVING:何時應該使用每個子句來尋找聚合資料?

WHERE 與 HAVING:何時應該使用每個子句來尋找聚合資料?

Barbara Streisand
Barbara Streisand原創
2025-01-21 09:41:07913瀏覽

WHERE vs. HAVING: When Should You Use Each Clause to Find Aggregated Data?

SQL:HAVING 與 WHERE – 過濾聚合資料

本文示範了 SQL 中 WHEREHAVING 子句之間的主要區別,特別是在處理聚合資料時。 我們將使用尋找最專業的講師的範例。 單獨的 WHERE 子句不足以完成此任務; HAVING 子句是必要的。

了解差異

WHERE 子句在 分組發生之前 過濾各個行。 它將條件應用於表中的各個記錄。 相反,HAVING 子句在 分組之後過濾 ,對 COUNTSUMAVGMIN 等聚合函數進行操作。 這在基於聚合結果進行過濾時至關重要,如我們的講師專業化範例中所示。

最佳實務

為了清晰和高效,一般規則是在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn