Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine MySQL-GROUP-BY-Abfrage den Fehler „only_full_group_by'?

Warum erzeugt meine MySQL-GROUP-BY-Abfrage den Fehler „only_full_group_by'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-29 13:44:10189Durchsuche

Why Does My MySQL GROUP BY Query Produce a

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn