Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine MySQL-GROUP-BY-Abfrage den Fehler „only_full_group_by'?
Das SELECT-Optimierungsproblem verstehen
In MySQL ist es bei Verwendung der GROUP BY-Klausel zwingend erforderlich, alle nicht aggregierten Spalten in die einzuschließen SELECT-Listen, die funktional nicht von den gruppierten Spalten abhängig sind. Dies wird durch die Einstellung „sql_mode=only_full_group_by“ erzwungen.
Wenn die Abfrage:
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
ausgeführt wird, verstößt sie gegen diese Regel, da die ID-Spalte nicht in der GROUP BY-Klausel enthalten ist. Dies führt zu dem Fehler:
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
Lösungsoptionen
Um dieses Problem zu beheben, gibt es mehrere Möglichkeiten:
1. Deaktivieren Sie den Modus „only_full_group_by“:
Dies kann mit dem folgenden Befehl erfolgen:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Dies wird jedoch nicht empfohlen, da es zu ungenauen Ergebnissen führen kann.
2. Alle Spalten in die GROUP BY-Klausel einschließen:
Diese Option stellt die Einhaltung des only_full_group_by-Modus sicher, indem alle nicht aggregierten Spalten explizit in die GROUP BY-Klausel einbezogen werden:
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`, `id`
3. Verwenden Sie Aggregatfunktionen:
Anstatt bestimmte Spalten auszuwählen, kann die Abfrage Aggregatfunktionen verwenden, um Daten aus den gruppierten Zeilen zu extrahieren und so das Problem unter Einhaltung bewährter Methoden zu beheben:
SELECT `proof_type`, COUNT(*) AS `row_count` FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
Dieser Ansatz vermeidet das Abrufen unnötiger Daten und optimiert die Leistung.
Das obige ist der detaillierte Inhalt vonWarum erzeugt meine MySQL-GROUP-BY-Abfrage den Fehler „only_full_group_by'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!