使用 GROUP BY
和 ORDER BY
MySQL 的 GROUP BY
和 ORDER BY
子句對於資料聚合和排列至關重要。 然而,將它們結合起來需要仔細考慮,以避免不可預測的結果。
處理 GROUP BY
查詢中的非聚合列
在 SELECT
查詢的 GROUP BY
清單中包含非聚合列可能會產生不一致的結果。 MySQL 通常從每個群組的第一行中選擇值,如果群組內的值不同,則該值是任意的。
解:子查詢和ANY_VALUE()
這種不確定性可以使用子查詢來解決。 透過對每組內的資料進行預先排序,子查詢確保選擇一致的值。
或者,ANY_VALUE()
函數(在 MySQL 5.7 及更高版本中可用)允許從每個群組內的非聚合列中檢索單一值,從而繞過不確定性問題。
ONLY_FULL_GROUP_BY
模式
MySQL 5.7.5及以後版本預設為ONLY_FULL_GROUP_BY
模式。這強制 SELECT
清單中的所有非聚合列也必須包含在 GROUP BY
子句中。 違規會導致錯誤。 為了合規性,需要 ANY_VALUE()
或聚合函數(如 SUM()
)。
以上是如何正確使用MySQL的`GROUP BY`和`ORDER BY`子句以避免意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!