Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine PostgreSQL-GROUP-BY-Abfrage fehl, während MySQL erfolgreich ist?
Strikte GROUP BY-Klausel und Fehlerbehandlung von PostgreSQL
Das Ausführen einer Abfrage wie SELECT * FROM the_table GROUP BY col2
in PostgreSQL führt zu dem Fehler: „Spalte „the_table.col3“ muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden.“ Dies liegt daran, dass PostgreSQL sich strikt an SQL-Standards hält und verlangt, dass alle Spalten in der SELECT-Liste entweder in der GROUP BY-Klausel enthalten sind oder Teil einer Aggregatfunktion sind.
Aggregatfunktionen: Die Lösung
Aggregatfunktionen wie SUM()
, MIN()
, MAX()
, AVG()
und COUNT()
berechnen einen einzelnen Wert aus einer Reihe von Werten. Um den PostgreSQL-Fehler zu beheben, müssen Sie eine Aggregatfunktion auf jede Spalte anwenden, die nicht in der GROUP BY
-Klausel vorhanden ist.
Das nicht standardmäßige Verhalten von MySQL
MySQLs mildere Handhabung von GROUP BY
ist eine nicht standardmäßige Erweiterung. Es ermöglicht die Auswahl nicht aggregierter Spalten, die nicht in der GROUP BY
-Klausel enthalten sind, aber die ausgewählten Werte sind nicht deterministisch; MySQL wählt für diese Spalten im Wesentlichen einen beliebigen Wert aus jeder Gruppe aus. Dies kann zu unvorhersehbaren und inkonsistenten Ergebnissen führen.
Der strengere Ansatz von PostgreSQL garantiert konsistente und reproduzierbare Abfrageergebnisse.
Korrigieren der PostgreSQL-Abfrage
Um die PostgreSQL-Abfrage zu korrigieren, verwenden Sie eine Aggregatfunktion für col3
(und alle anderen Spalten, die nicht in der GROUP BY
-Klausel enthalten sind). Zum Beispiel:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
Diese überarbeitete Abfrage verwendet MIN()
, um den Mindestwert von col3
für jede durch col2
definierte Gruppe auszuwählen. Sie sollten die entsprechende Aggregatfunktion (z. B. MAX()
, AVG()
) basierend auf Ihrem gewünschten Ergebnis auswählen.
Das obige ist der detaillierte Inhalt vonWarum schlägt meine PostgreSQL-GROUP-BY-Abfrage fehl, während MySQL erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!