Heim >Datenbank >MySQL-Tutorial >Warum schlägt meine PostgreSQL-GROUP-BY-Abfrage fehl, während MySQL erfolgreich ist?

Warum schlägt meine PostgreSQL-GROUP-BY-Abfrage fehl, während MySQL erfolgreich ist?

DDD
DDDOriginal
2025-01-18 09:56:12759Durchsuche

Why Does My PostgreSQL GROUP BY Query Fail While MySQL Succeeds?

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!

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