PostgreSQLs GROUP BY
-Klausel: Beheben häufiger Fehler
Das strikte GROUP BY
-Verhalten von PostgreSQL führt oft zu dem Fehler: „Spalte „the_table.col3“ muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden.“ Dieser Artikel erläutert dieses Verhalten und bietet Lösungen.
Aggregatfunktionen in SQL verstehen
Aggregatfunktionen wie MIN
, MAX
, SUM
, COUNT
und AVG
fassen Daten innerhalb von Gruppen zusammen. Sie erzeugen ein einziges Ergebnis aus mehreren Eingabewerten.
Der PostgreSQL-GROUP BY
Fehler erklärt
Der Fehler tritt auf, wenn eine GROUP BY
-Klausel ohne entsprechende Aggregatfunktionen verwendet wird. Die Abfrage versucht, Zeilen basierend auf einer nicht aggregierten Spalte (z. B. col2
) zu gruppieren, während andere nicht aggregierte Spalten (col3
, col1
) ausgewählt werden, die nicht Teil der Gruppierung sind. PostgreSQL verlangt, dass alle ausgewählten nicht aggregierten Spalten entweder in der GROUP BY
-Klausel enthalten sind oder von einer Aggregatfunktion verarbeitet werden.
PostgreSQL vs. MySQL GROUP BY
Handhabung
Die GROUP BY
-Implementierung von MySQL ist weniger streng. Möglicherweise ist die Auswahl nicht aggregierter Spalten möglich, die nicht in der GROUP BY
-Klausel enthalten sind. Dies kann jedoch zu unvorhersehbaren Werten führen, insbesondere wenn diese Spalten innerhalb einer Gruppe unterschiedliche Werte aufweisen. Dieses Verhalten ist nicht mit dem SQL-Standard kompatibel.
PostgreSQL-GROUP BY
Abfragen korrigieren
Um den PostgreSQL-Fehler zu beheben, wenden Sie eine Aggregatfunktion auf alle nicht aggregierten Spalten in der SELECT
-Liste an. 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 gewährleistet eine genaue Gruppierung und berechnet die Mindestwerte für col3
und col1
innerhalb jeder Gruppe.
Best Practices und SQL-Standards
Verwenden Sie immer Aggregatfunktionen mit GROUP BY
, um Datenkonsistenz und vorhersehbare Ergebnisse zu gewährleisten. Dies steht im Einklang mit dem SQL92-Standard, der vorschreibt, dass nicht aggregierte Spalten in der SELECT
-Liste entweder in der GROUP BY
-Klausel enthalten sein müssen oder funktional von den Gruppierungsspalten abhängig sein müssen.
Das obige ist der detaillierte Inhalt vonWarum erfordert PostgreSQL nicht aggregierte Spalten in GROUP BY- oder Aggregate-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!