MySQL 的 GROUP BY
子句:理解非聚合查詢
MySQL 的 GROUP BY
子句在 SELECT
語句中不使用聚合函數時,會表現出獨特的行為。 雖然看似允許從分組中省略列,但此功能依賴於一個關鍵假設:省略的列在每個組中必須具有相同的值。
不確定的結果:遺漏的陷阱
如果省略的列在群組內包含不同的值,則結果將變得不可預測。 MySQL 從每組中為省略的欄位選擇任意值。 這意味著輸出並不始終可靠。
MySQL 的最佳化及其啟示
MySQL 的最佳化技術有時允許省略 GROUP BY
中的欄位以提高效能。 然而,這種最佳化取決於前面提到的每組內恆定值的假設。 違反這個假設會導致上面討論的不確定結果。
確保可靠GROUP BY
查詢
為了獲得可預測且可靠的結果,最佳實踐是在 GROUP BY
子句中明確包含所有相關列。或者,如果匯總資料是目標,請使用聚合函數(如 MAX
、MIN
、AVG
、SUM
等)來獲得確定性結果。
更確定的方法
為了避免隱式 GROUP BY
行為的歧義,請考慮以下替代查詢:
<code class="language-sql">SELECT A.* FROM emp AS A WHERE A.salary = ( SELECT MAX(B.salary) FROM emp B WHERE B.dept = A.dept );</code>
這種方法直接根據每個部門內的最高工資選擇行,提供清晰一致的結果。
以上是在沒有聚合函數的情況下,MySQL 的「GROUP BY」子句如何表現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!