Detaillierte Erklärung des PostgreSQL GROUP BY-Fehlers
Beim Abfragen einer Datenbanktabelle mithilfe der GROUP BY
-Klausel in PostgreSQL müssen alle Spalten, die in der SELECT
-Liste enthalten, aber nicht aggregiert sind, in der GROUP BY
-Klausel erscheinen oder als Argumente für eine Aggregatfunktion verwendet werden. Dieser Fehler tritt auf, wenn versucht wird, nach einer bestimmten Spalte zu gruppieren (z. B. col2
), die SELECT
-Anweisung jedoch andere Spalten enthält, die nicht aggregiert sind (z. B. col3
und col1
).
Aggregationsfunktion
Aggregationsfunktionen ermöglichen es uns, mehrere Datenzeilen zusammenzufassen. Zu den gängigen Aggregatfunktionen gehören:
COUNT
(Datensätze zählen)SUM
(berechnet die Summe der Spalten)MIN
(Mindestwert suchen)MAX
(Maximalwert finden)AVG
(Durchschnitt berechnen)Unterschiede in der GROUP BY-Verarbeitung zwischen MySQL und PostgreSQL
MySQL behandelt die GROUP BY
-Klausel anders als PostgreSQL. Selbst wenn die SELECT
-Liste in MySQL nicht aggregierte Spalten enthält, die nicht in der GROUP BY
-Klausel erscheinen, ist dies dennoch zulässig. Allerdings können die von diesen Spalten zurückgegebenen Werte zwischen den Datensätzen willkürlich variieren, was zu möglichen Inkonsistenzen führen kann.
Im Gegensatz dazu hält sich PostgreSQL strikt an den SQL-Standard und verlangt, dass nicht aggregierte Spalten in eine GROUP BY
-Klausel aufgenommen oder als Argumente für Aggregatfunktionen verwendet werden müssen.
Lösung
Um diesen Fehler in PostgreSQL zu beheben, schreiben Sie die Abfrage neu, um Aggregatfunktionen für nicht aggregierte Spalten zu verwenden. Zum Beispiel:
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
Diese Abfrage verwendet die Aggregatfunktion MIN
, um den Mindestwert von col2
und col3
in jeder durch col1
definierten Gruppe abzurufen.
Durch die Verwendung von Aggregatfunktionen stellt die Abfrage sicher, dass die zurückgegebenen Werte konsistent sind und den Anforderungen der PostgreSQL-GROUP BY
-Klausel entsprechen.
Das obige ist der detaillierte Inhalt vonWarum löst meine PostgreSQL-Abfrage mit einer GROUP BY-Klausel einen Fehler aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!