PostgreSQL GROUP BY 錯誤詳解
在 PostgreSQL 中使用 GROUP BY
子句查詢資料庫表時,所有包含在 SELECT
清單中但未進行聚合的資料列都必須出現在 GROUP BY
子句中,或用作聚合函數的參數。 當嘗試按特定列(例如 col2
)分組,但 SELECT
語句中包含其他未進行聚合的欄位(例如 col3
和 col1
)時,就會出現此錯誤。
聚合函數
聚合函數允許我們匯總多行資料。常見的聚合函數包括:
COUNT
(計算記錄數)SUM
(計算列的總和)MIN
(找出最小值)MAX
(找出最大值)AVG
(計算平均值)MySQL 與 PostgreSQL 的 GROUP BY 處理差異
MySQL 對 GROUP BY
子句的處理方式與 PostgreSQL 不同。在 MySQL 中,即使 SELECT
清單中包含未出現在 GROUP BY
子句中的未聚合列,仍允許。但是,這些列傳回的值在記錄之間可能任意變化,從而導致潛在的不一致性。
相較之下,PostgreSQL 嚴格遵守 SQL 標準,要求未聚合的欄位必須包含在 GROUP BY
子句中,或用作聚合函數的參數。
解決方法
要解決 PostgreSQL 中的此錯誤,請重寫查詢以對未聚合的資料列使用聚合函數。例如:
<code class="language-sql">SELECT col2, MIN(col3) AS min_col3, MIN(col1) AS min_col1 FROM the_table GROUP BY col2;</code>
此查詢使用 MIN
聚合函數來擷取由 col2
定義的每個群組中 col3
和 col1
的最小值。
透過使用聚合函數,查詢確保傳回的值一致,並符合 PostgreSQL GROUP BY
子句的要求。
以上是為什麼我的 GROUP BY 子句的 PostgreSQL 查詢會拋出錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!