PostgreSQL 的 GROUP BY
子句:解決常見錯誤
PostgreSQL 嚴格的 GROUP BY
行為經常會導致錯誤:「列「the_table.col3」必須出現在 GROUP BY 子句中或在聚合函數中使用。」本文闡明了此行為並提供了解決方案。
理解 SQL 中的聚合函數
聚合函數,例如 MIN
、MAX
、SUM
、COUNT
和 AVG
,匯總組內的資料。它們根據多個輸入值產生單一結果。
PostgreSQL GROUP BY
錯誤解釋
當在沒有適當聚合函數的情況下使用 GROUP BY
子句時,會發生錯誤。 此查詢嘗試根據非聚合列(例如 col2
)對行進行分組,同時選擇不屬於分組的其他非聚合列(col3
、col1
)。 PostgreSQL 要求所有選取的非聚合欄位要麼位於 GROUP BY
子句中,要麼由聚合函數處理。
PostgreSQL 與 MySQL GROUP BY
處理
MySQL 的 GROUP BY
實作較不嚴格。它可能允許選擇 GROUP BY
子句中不存在的非聚合列,但這可能會導致不可預測的值,特別是如果這些列在群組內具有不同的值。 此行為不符合標準 SQL。
修正 PostgreSQL GROUP BY
查詢
要修復 PostgreSQL 錯誤,請將聚合函數套用至 SELECT
清單中的所有非聚合列。 例如:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
此修訂後的查詢可確保準確分組併計算每個組內 col3
和 col1
的最小值。
最佳實務與 SQL 標準
始終將聚合函數與GROUP BY
一起使用,以確保資料一致性和可預測的結果。 這與 SQL92 標準一致,該標準要求 SELECT
清單中的非聚合列必須位於 GROUP BY
子句中或在功能上依賴分組列。
以上是為什麼 PostgreSQL 需要 GROUP BY 或聚合函數中的非聚合列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!