理解 SQL 的 GROUP BY 和聚合函數
SQL 的 GROUP BY
子句根據指定的欄位有效地對行進行分組。 然而,當選擇未包含在分組中的列時,經常會出現混亂。
考慮這個查詢:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no;</code>
此查詢在許多資料庫系統(如 Oracle)中都會失敗,因為它嘗試選擇所有欄位 (*
),同時僅按 order_no
進行分組。 這違反了非聚合列必須是 GROUP BY
子句的一部分的規則。
解決方案? 在 GROUP BY
子句中與聚合函數一起包含非聚合列。 例如:
<code class="language-sql">SELECT order_no, SUM(order_price) FROM order_details GROUP BY order_no;</code>
這裡,order_no
同時出現在SELECT
和GROUP BY
子句中,而SUM(order_price)
執行聚合。
解決關鍵問題:
聚合函數可以存取群組內的所有欄位嗎?
是的,像SUM()
這樣的聚合函數對每個群組中的所有行進行操作,計算指定列的聚合值。 在上面的範例中,SUM(order_price)
合計每個 order_no
的價格。
但是,存取非聚合列而不將其包含在 GROUP BY
子句中會導致錯誤。資料庫無法確定從群組內的多行中選擇哪個值。
因此,請務必在 GROUP BY
子句中包含所有非聚合列,或在使用 SELECT
.GROUP BY
時將
以上是聚合函數如何與 SQL 中的 GROUP BY 子句配合使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!