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
Freigeben: 2024-12-29 13:44:10
Original
197 Leute haben es durchsucht

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`
Nach dem Login kopieren

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
Nach dem Login kopieren

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',''));
Nach dem Login kopieren

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`
Nach dem Login kopieren

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`
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage