Group-By
擁有和分組依據子句
我昨天遇到了這個問題。我正在尋找一個解釋。
關於 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
列表中。