不使用GROUP BY 的MySQL 聚合函數:為什麼以及如何
在MySQL 中,可以在SELECT 清單中使用聚合函數而不指定GROUP BY子句,與SQL Server 等其他RDBMS 不同。這種看似意外的行為其實是一種有意的設計選擇。
當不使用 GROUP BY 的聚合函數時,MySQL 會將整個結果集視為一個群組。這意味著聚合函數為查詢中指定的整個表或子集傳回單一值。
例如,查詢 SELECT col1,col2,sum(col3) FROM tbl1;傳回包含 col1 和 col2 的第一個值以及 col3 中所有值的總和的單行。在需要計算總計統計資訊而不對資料進行分組的情況下,此行為非常有用。
可以使用 ONLY_FULL_GROUP_BY 伺服器 SQL 模式修改不帶 GROUP BY 的聚合函數的行為。 MySQL 5.7.5之前的版本預設為停用該模式。但是,可以啟用它以禁止不使用 GROUP BY 的聚合函數。
要啟用ONLY_FULL_GROUP_BY,請將以下行加入MySQL 設定檔(通常是my.cnf):
sql-mode=ONLY_FULL_GROUP_BY
一次啟用後,MySQL 將對使用不含GROUP BY 的聚合函數的查詢拋出錯誤。這有助於確保資料完整性並防止錯誤結果。
以上是MySQL 中如何使用沒有 GROUP BY 的聚合函數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!