PostgreSQL與MySQL的GROUP BY差異
MySQL和PostgreSQL的GROUP BY語法有差異,這常常導致錯誤,例如「列X必須出現在GROUP BY子句中」。
MySQL的GROUP BY行為
在MySQL中,以下查詢將為bookdate欄位中的每個唯一值傳回一行:
<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>
PostgreSQL的GROUP BY要求
然而,在PostgreSQL中,未明確包含在GROUP BY子句中或未用於聚合函數的欄位必須是主鍵的一部分。在上面的查詢中,availables.id既未包含在GROUP BY中,也未用於聚合,因此導致錯誤。
模擬MySQL的行為
為了在PostgreSQL中模擬MySQL的GROUP BY行為,可以使用DISTINCT ON來取代GROUP BY:
<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確保指定列的唯一性,同時保留ORDER BY子句中指定的順序。此語法模擬了MySQL按bookdate欄位唯一值傳回單行記錄的能力。
以上是PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中實作 MySQL 的分組行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!