理解 SQL 的 GROUP BY 和聚合函數:更清晰的圖片
SQL 的資料聚合能力很強大,但是 GROUP BY
和聚合函數之間的交互作用可能會讓人困惑。一個常見的錯誤是使用 SELECT
後在 GROUP BY
語句中選擇非聚合列,而沒有在 GROUP BY
子句中明確列出它們。
例如:
<code class="language-sql">SELECT * FROM order_details GROUP BY order_no</code>
此查詢將會失敗,並產生錯誤,因為「*」不是 GROUP BY
子句的一部分。 解決方案是在 GROUP BY
子句中列出所有非聚合列。
但是,使用聚合函數會改變行為:
<code class="language-sql">SELECT SUM(order_price) FROM order_details GROUP BY order_no</code>
這成功地將每個 order_no
的訂單價格相加,即使 order_price
子句中沒有 GROUP BY
也是如此。 聚合函數計算每個群組中的所有行,無論對應的列是否在 GROUP BY
清單中。
為避免誤解,請記住,按屬性分組後,您無法直接存取 GROUP BY
表達式中未包含的其他屬性。 只有聚合函數才能透過基於群組的計算來存取這些屬性。
標準 SQL(與 MySQL 不同)要求在 GROUP BY
子句中明確包含所有非聚合列。 您可以按列的子集進行分組,但仍選擇非聚合列,只要這些列是 GROUP BY
.
最後,使用具有不同分組基礎的多個聚合函數可能會導致不可預測或不明確的結果。 仔細組合 GROUP BY
和聚合函數,確保在執行查詢之前您的預期結果是明確的。
以上是GROUP BY 和聚合函數如何在 SQL 查詢中互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!