PostgreSQL 嚴格的 GROUP BY 子句與錯誤處理
在PostgreSQL 中執行類似SELECT * FROM the_table GROUP BY col2
的查詢會導致錯誤:「列「the_table.col3」必須出現在GROUP BY 子句中或在聚合函數中使用。」這是因為PostgreSQL 嚴格遵守SQL 標準,要求SELECT 清單中的所有欄位要麼包含在GROUP BY 子句中,要麼成為聚合函數的一部分。
聚合函數:解
聚合函數,例如 SUM()
、MIN()
、MAX()
、AVG()
和 COUNT()
,從一組值計算單一值。 若要修復 PostgreSQL 錯誤,您必須將聚合函數套用至 GROUP BY
子句中不存在的任何欄位。
MySQL 的非標準行為
MySQL 對 GROUP BY
更寬鬆的處理是一個非標準擴充。 它允許選擇不在 GROUP BY
子句中的非聚合列,但所選值是不確定的; MySQL 本質上是從每個群組中為這些列選取一個任意值。 這可能會導致不可預測且不一致的結果。
PostgreSQL 更嚴格的方法保證了一致且可重現的查詢結果。
修正 PostgreSQL 查詢
要修正 PostgreSQL 查詢,請在 col3
(以及不在 GROUP BY
子句中的任何其他欄位)上使用聚合函數。例如:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
此修改後的查詢使用 MIN()
為 col3
定義的每個群組選擇 col2
的最小值。 您應該根據您想要的結果選擇適當的聚合函數(例如,MAX()
、AVG()
)。
以上是為什麼我的 PostgreSQL GROUP BY 查詢失敗而 MySQL 成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!