首頁 >資料庫 >mysql教程 >為什麼我的 MySQL GROUP BY 查詢會產生「only_full_group_by」錯誤?

為什麼我的 MySQL GROUP BY 查詢會產生「only_full_group_by」錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-29 13:44:10184瀏覽

Why Does My MySQL GROUP BY Query Produce a

瞭解SELECT 最佳化問題

在MySQL 中,使用GROUP BY 子句時,必須將所有非聚合列包含在功能上不依賴分組列的SELECT 清單。這是透過 sql_mode=only_full_group_by 設定強制執行的。

當執行查詢:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

時,它違反了此規則,因為 id 列不包含在 GROUP BY 子句中。這會導致錯誤:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'returntr_prod.tbl_customer_pod_uploads.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

解決方案選項

要解決此問題,有多個選項:

1。停用 only_full_group_by 模式:

這可以使用以下命令完成:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

但是,不建議這樣做,因為它可能會導致結果不準確。

2.在GROUP BY 子句中包含所有列:

此選項透過在GROUP BY 子句中明確包含所有非聚合列來確保符合only_full_group_by模式:

SELECT *
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`, `id`

3.使用聚合函數:

查詢可以利用聚合函數從分組行中提取數據,而不是選擇特定列,從而在遵循最佳實踐的同時解決問題:

SELECT `proof_type`, COUNT(*) AS `row_count`
FROM `tbl_customer_pod_uploads`
WHERE `load_id` = '78' AND
      `status` = 'Active'
GROUP BY `proof_type`

這種方法可以避免檢索不必要的資料並優化效能。

以上是為什麼我的 MySQL GROUP BY 查詢會產生「only_full_group_by」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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