Heim >Datenbank >MySQL-Tutorial >PostgreSQL vs. MySQL GROUP BY: Wie erreicht man das Gruppierungsverhalten von MySQL in PostgreSQL?

PostgreSQL vs. MySQL GROUP BY: Wie erreicht man das Gruppierungsverhalten von MySQL in PostgreSQL?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-11 08:24:42772Durchsuche

PostgreSQL vs. MySQL GROUP BY: How to Achieve MySQL's Grouping Behavior in PostgreSQL?

Unterschiede in GROUP BY zwischen PostgreSQL und MySQL

Es gibt Unterschiede in der GROUP BY-Syntax von MySQL und PostgreSQL, was häufig zu Fehlern wie „Spalte X muss in der GROUP BY-Klausel erscheinen“ führt.

Das GROUP BY-Verhalten von MySQL

In MySQL gibt die folgende Abfrage eine Zeile für jeden eindeutigen Wert in der Spalte „bookdate“ zurück:

<code class="language-sql">SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at</code>

GROUP BY-Anforderungen für PostgreSQL

In PostgreSQL müssen jedoch Spalten, die nicht explizit in der GROUP BY-Klausel enthalten sind oder in Aggregatfunktionen verwendet werden, Teil des Primärschlüssels sein. In der obigen Abfrage ist „availables.id“ weder in „GROUP BY“ enthalten noch wird es in der Aggregation verwendet, was den Fehler verursacht.

MySQL-Verhalten simulieren

Um das GROUP BY-Verhalten von MySQL in PostgreSQL zu simulieren, können Sie DISTINCT ON anstelle von GROUP BY verwenden:

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate) availables.*
FROM availables
INNER JOIN rooms ON rooms.id = availables.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
ORDER BY availables.bookdate, availables.updated_at</code>

DISTINCT ON stellt die Eindeutigkeit der angegebenen Spalten sicher und behält gleichzeitig die in der ORDER BY-Klausel angegebene Reihenfolge bei. Diese Syntax simuliert die Fähigkeit von MySQL, eine einzelne Datensatzzeile durch einen eindeutigen Wert in der Spalte „bookdate“ zurückzugeben.

Das obige ist der detaillierte Inhalt vonPostgreSQL vs. MySQL GROUP BY: Wie erreicht man das Gruppierungsverhalten von MySQL in PostgreSQL?. 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