首頁 >資料庫 >mysql教程 >SQL 的 GROUP BY 子句在有或沒有聚合函數的情況下如何運作?

SQL 的 GROUP BY 子句在有或沒有聚合函數的情況下如何運作?

Barbara Streisand
Barbara Streisand原創
2025-01-13 07:10:45614瀏覽

How Does SQL's GROUP BY Clause Work with and Without Aggregate Functions?

SQL 的 GROUP BY 子句:深入探究

SQL GROUP BY 子句是一個強大的工具,用於根據指定列對行進行分組,支援對分組資料進行聚合計算(如 SUMCOUNTAVG)。 讓我們來探索一下它在使用和不使用聚合函數時的行為。

GROUP BY 沒有聚合函數:陷阱

在沒有聚合函數的情況下使用 GROUP BY 會導致錯誤。 考慮這個例子:

<code class="language-sql">SELECT *
FROM order_details
GROUP BY order_no</code>

這會失敗,因為 GROUP BY 要求 SELECT 清單中的所有非聚合列也包含在 GROUP BY 子句中。 * 通配符選擇所有列,使查詢不明確,因為資料庫無法確定為每個 order_no 群組內的非分組列傳回哪個值。

GROUP BY 使用聚合函數:解

使用聚合函數時問題已解決。 聚合函數對整個群組進行操作,允許查詢產生有意義的結果。 例如計算每個訂單的總價:

<code class="language-sql">SELECT SUM(order_price)
FROM order_details
GROUP BY order_no</code>

此查詢成功傳回每個唯一 order_priceorder_no 之和。

聚合函數與分組資料:揭示隱藏屬性

聚合函數提供了一種存取每個群組內的屬性的方法。 在前面的範例中,SUM 函數計算每個 order_no 組的總和。 這展示了聚合函數「深入」分組並檢索匯總資訊的能力。

標準 SQL 合規性:GROUP BY 規則

標準 SQL(與 MySQL 更寬鬆的方法不同)要求 SELECT 清單中的所有非聚合列必須出現在 GROUP BY 子句中。 因此,以下查詢是有效的:

<code class="language-sql">SELECT order_no, SUM(order_price)
FROM order_details
GROUP BY order_no</code>

這是有效的,因為 order_no(非聚合列)出現在 GROUP BY 子句中。 同樣的原則也適用於具有多個分組列和聚合函數的查詢:

<code class="language-sql">SELECT order_no, order_price, MAX(order_item)
FROM order_details
GROUP BY order_no, order_price</code>

此查詢有效,因為 order_noorder_price 都包含在 GROUP BY 子句中。

以上是SQL 的 GROUP BY 子句在有或沒有聚合函數的情況下如何運作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn