2017-09-15 60 views
-1

編寫返回三列的SELECT語句:如何在此查詢中運行GROUP BY子句?

EmailAddressOrderIDorder total每個customer

爲此,您可以將結果集按EmailAddressOrderID列分組。

此外,您必須從OrderItems表中的列中計算訂單總額。

SELECT c.EmailAddress, oi.OrderID, (oi.ItemPrice * oi.Quantity) - 
oi.DiscountAmount 
FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID 
       JOIN OrderItems oi ON o.OrderID = oi.OrderID 
GROUP BY c.EmailAddress, oi.OrderID 
+0

這是一個任務? – marekful

+0

這是的,但它是在上週四晚上。 –

回答

0

列必須出現在GROUP BY子句中或用於聚合函數中。您的列

(oi.ItemPrice * oi.Quantity) - oi.DiscountAmount 

不符合此要求。我假設你想要做的是

sum((oi.ItemPrice * oi.Quantity) - oi.DiscountAmount) 

+0

我從來沒有見過像SUM()包圍的'x * y - z'這樣的算法,以便使它成爲單行函數。這對我來說很奇怪,因爲我沒有添加任何東西。你只是使用SUM(),因爲它使它成爲單行輸出? –

2

您正在尋找GROUP BYSUM()

SELECT c.EmailAddress, oi.OrderID, 
     SUM(oi.ItemPrice * oi.Quantity - oi.DiscountAmount) 
FROM Customers c JOIN 
    Orders o 
    ON c.CustomerID = o.CustomerID JOIN 
    OrderItems oi 
    ON o.OrderID = oi.OrderID 
GROUP BY c.EmailAddress, oi.OrderID; 
+0

我以前從來沒有見過像SUM()包圍的'x * y - z'這樣的算法,以便使它成爲單行函數。這對我來說很奇怪,因爲我沒有添加任何東西。你只是使用SUM(),因爲它使它成爲單行輸出? –

+0

@AustinVB。 。 。不,我要說,因爲訂單中的多個項目需要在一行中彙總。 –

+0

而且默認是使用SUM()?可以使用別的東西嗎? –