首頁 > 資料庫 > mysql教程 > 為什麼我的 MySQL GROUP BY 查詢在 PostgreSQL 中失敗?

為什麼我的 MySQL GROUP BY 查詢在 PostgreSQL 中失敗?

Barbara Streisand
發布: 2025-01-11 07:36:43
原創
160 人瀏覽過

Why Does My MySQL GROUP BY Query Fail in PostgreSQL?

PostgreSQL 與 MySQL:GROUP BY 子句比較

將 MySQL 查詢移轉到 PostgreSQL 可能會導致錯誤「列 'XYZ' 必須出現在 GROUP BY 子句中或在聚合函數中使用」。這種差異源自於這些資料庫處理 GROUP BY 子句的方式。

MySQL 的非標準方法

MySQL 的 GROUP BY 實作偏離了 SQL 標準。 它允許選擇 GROUP BY 子句中未明確列出的列,從而導致不可預測的輸出。 從每組中選擇的行是隱式決定的,受索引和查詢最佳化等因素的影響。

PostgreSQL 符合標準GROUP BY

然而,PostgreSQL 嚴格遵守 SQL 標準。 SELECT 清單中的所有欄位必須包含在 GROUP BY 子句中或是聚合函數的一部分(如 SUMAVGCOUNT)。 否則會出現上述錯誤。

在 PostgreSQL 中複製 MySQL 的行為

雖然 PostgreSQL 的方法更具可預測性且符合標準,但您可以使用 DISTINCT ON 來模擬 MySQL 的非標準行為。以下 PostgreSQL 查詢示範了這一點:

<code class="language-sql">SELECT DISTINCT ON (availables.bookdate)
availables.*,
rooms.hotel_id
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.updated_at;</code>
登入後複製

DISTINCT ONavailables.bookdate 中的每個不同值傳回一行,保持 ORDER BY 子句指定的行順序。 這有效地模仿了 MySQL 在這個特定場景中的非標準 GROUP BY 行為。 請注意,此方法依賴 ORDER BY 子句來定義為每個不同群組選擇哪一行。

以上是為什麼我的 MySQL GROUP BY 查詢在 PostgreSQL 中失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板