Group-By

擁有和分組依據子句

  • November 14, 2021

我昨天遇到了這個問題。我正在尋找一個解釋。

關於 SQL 查詢,下列哪項陳述是正確的?

P :即使沒有 GROUP BY 子句,SQL 查詢也可以包含 HAVING 子句

問:SQL 查詢只有在有 GROUP BY 子句時才能包含 HAVING 子句

R : GROUP BY 子句中使用的所有屬性都必須出現在 SELECT 子句中

S :並非 GROUP BY 子句中使用的所有屬性都需要出現在 SELECT 子句中

(A) P 和 R。

(B) P 和 S。

(C) Q 和 R。

(D) Q 和 S。

我選擇 A 作為答案。但實際上 B 是正確答案。

我想知道有些網站提到 R 是正確的,而其他網站說 S 是正確的。後兩者之間哪個說法是正確的?

“R”是不正確的,因為這表示每個被分組的欄位也需要被選中,這絕對不是真的。子句中的欄位GROUP BY定義瞭如何折疊與這些欄位相關的一組行。但是沒有理由你必須SELECT在列表中返回那些相同的欄位。如果您想在非分組欄位上進行聚合,則不需要也返回分組欄位。例如以下是一個有效的查詢:

SELECT SUM(Price) AS TotalAmountSold
FROM SalesOrders
GROUP BY ProductName

當然,該查詢的結果沒有太大意義,因為它只會返回一個總金額列表,而沒有實際ProductName關聯的金額。因此,不知道哪個總數用於哪個產品。

GROUP BY但是子句中的欄位可以像這樣添加到SELECT列表中(沒有任何聚合函式):

SELECT ProductName, SUM(Price) AS TotalAmountSold
FROM SalesOrders
GROUP BY ProductName

這使得一個有意義的查詢。但總而言之,“R”不正確的原因是因為它說“必須”這是不正確的,而是它們可能出現在SELECT列表中。

引用自:https://dba.stackexchange.com/questions/302590