Heim >Datenbank >MySQL-Tutorial >PostgreSQL vs. MySQL GROUP BY: Wie erreicht man das Gruppierungsverhalten von MySQL 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!