首頁 >資料庫 >mysql教程 >PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中實作 MySQL 的分組行為?

PostgreSQL vs. MySQL GROUP BY:如何在 PostgreSQL 中實作 MySQL 的分組行為?

Patricia Arquette
Patricia Arquette原創
2025-01-11 08:24:42772瀏覽

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

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn