在SQL中,GROUP BY子句允許我們根據一個或多個欄位對資料進行分組並檢索聚合結果。然而,在MySQL和PostgreSQL中使用此子句時,可能會遇到不同的行為,導致PostgreSQL出現錯誤「列'the_table.col3'必須出現在GROUP BY子句中或用作聚合函數」。
聚合函數(例如MIN()、MAX()、COUNT()和SUM())使我們能夠將多個值組合成單一結果。這些函數通常與GROUP BY子句一起使用,以計算每個群組的總計統計資料。
MySQL允許對GROUP BY規則進行寬鬆的解釋,即使未將非聚合列包含在GROUP BY子句中,也允許它們出現在select清單中。這種行為可能導致不確定的值,因為MySQL可以任意選擇每個群組的值。
相反,PostgreSQL嚴格遵守SQL標準。使用GROUP BY子句時,它要求select清單中的所有非聚合資料列必須包含在GROUP BY子句中,或用在聚合函數中。
為了解決PostgreSQL中的錯誤,我們需要使用聚合函數來計算每個分組資料列的總計統計資料。例如,我們可以使用以下查詢:
<code class="language-sql">SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1 FROM the_table GROUP BY col2;</code>
雖然MySQL的方法提供了靈活性,但它可能導致不確定的值。 PostgreSQL對SQL標準的嚴格執行確保聚合結果一致且可預測。在PostgreSQL中使用GROUP BY子句時,最佳實務始終是將非聚合列包含在GROUP BY子句中或使用聚合函數。
以上是MySQL 與 PostgreSQL GROUP BY:為什麼出現「必須出現在 GROUP BY 子句中」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!