Heim  >  Artikel  >  Datenbank  >  Warum schlägt meine MySQL 5.7-Abfrage mit Aggregation ohne eine GROUP BY-Klausel fehl?

Warum schlägt meine MySQL 5.7-Abfrage mit Aggregation ohne eine GROUP BY-Klausel fehl?

DDD
DDDOriginal
2024-10-26 01:42:28909Durchsuche

Why is my MySQL 5.7  query with aggregation failing without a GROUP BY clause?

Aggregierte Abfrage erfordert GROUP BY in MySQL 5.7

F: Nach dem Upgrade auf MySQL 5.7.14 tritt beim Ausführen einer Abfrage ein Fehler auf ohne eine GROUP BY-Klausel. Die Abfrage, die eine Aggregation (COUNT) und eine nicht aggregierte Spalte in der SELECT-Liste umfasst, funktionierte zuvor auf einem älteren Computer.

A: In MySQL Version 5.7.5 und höher hat sich das Standardverhalten geändert um die Verwendung von GROUP BY beim Aggregieren von Daten zu erzwingen. Das bedeutet, dass bei Verwendung von Funktionen wie COUNT in der SELECT-Klausel alle nicht aggregierten Spalten in die GROUP BY-Klausel einbezogen werden müssen.

Um den Fehler zu beheben, haben Sie zwei Möglichkeiten:

  • MySQL-Einstellungen ändern:Passen Sie die MySQL-Konfiguration an, um zum vorherigen Verhalten zurückzukehren, das nicht aggregierte Spalten in aggregierten Abfragen ohne GROUP BY zuließ.
  • Korrigieren Sie die Abfrage: Aktualisieren Sie die Abfrage so, dass sie alle nicht aggregierten Spalten in der GROUP BY-Klausel einschließt, wie im folgenden Beispiel:
<code class="sql">SELECT id, password, COUNT(id) AS count 
FROM users 
WHERE email = :email 
GROUP BY id, password 
LIMIT 1</code>

Es ist wichtig zu beachten, dass in MySQL 5.7.5 und höher eine Ausnahme besteht wenn die nicht aggregierte Spalte mithilfe von Filtern in der WHERE-Klausel auf einen einzelnen Wert beschränkt wurde. In solchen Fällen kann die nicht aggregierte Spalte aus der GROUP BY-Klausel ausgeschlossen werden. Weitere Einzelheiten finden Sie in der offiziellen Dokumentation.

Das obige ist der detaillierte Inhalt vonWarum schlägt meine MySQL 5.7-Abfrage mit Aggregation ohne eine GROUP BY-Klausel fehl?. 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