2016-06-16 120 views
-2

我正在關注w3schools的SQL教程。通過3個表獲取信息

我想獲得託運人交付的所有訂單的價值。我不知道如何獲取這些詳細信息,因爲這些信息位於不同的表格中,而INNER JOIN也不適合我。

數據庫:http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby 現在,我設法得到每個託運人的訂單數量。

SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders 
LEFT JOIN Shippers 
ON Orders.ShipperID=Shippers.ShipperID 
GROUP BY ShipperName; 

我怎麼能得到那些價值?

+0

你是什麼意思的訂單的「價值」?您擁有的是每個託運人的記錄,包括每個託運人的總訂單數。你在找什麼結果? – David

+0

您可以請分享表格的結構,一些樣本數據以及您想要獲得的樣本結果嗎? – Mureinik

+0

「我怎麼能得到這些的價值?」什麼是價值?什麼是價值?你能解釋一下你的意思嗎? – JNevill

回答

3

要帶來ProductPrice到你的查詢,你將需要在Orders.IdOrderDetailsOrder表加入,然後在Products表連接到OrderDetail表上ProductID

SELECT Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    Sum(Products.price * OrderDetails.Quantity) AS SumOfPrice 
FROM Orders 
    LEFT JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    LEFT JOIN OrderDetails ON ORders.OrderID = OrderDetails.OrderID 
    LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY ShipperName; 

我只是堅持LEFT JOIN這裏作爲你的例子使用,但INNER JOIN將工作得很好,更有效率。

SQL語句的FROM子句是要針對數據庫運行的SQL的第一部分之一。它建立了我們從中獲取信息的表格以及這些表格之間的關係(使用ON關鍵字)。因此,我們在這裏引入4個表格,並使用ON關鍵字來顯示它們之間使用其各自ID的關係。然後,我們可以將它們的字段添加到SQL語句的SELECT部分並在需要時聚合。

+0

正確的想法,但你需要乘以數量乘以價格。 –

+0

謝謝@DanBracuk。我已更新查詢以執行擴展價格。這更有意義。 – JNevill

+0

我想我開始明白應該如何工作。我試圖運行這個選擇,但在查詢表達式的Orders中出現錯誤「Syntax error(missing operator)」。ShipperID = Shippers.ShipperID LEFT JOIN OrderDetails ON ORders.OrderID = OrderDetails.OrderID LEFT JOIN Products ON OrderDetails.ProductID = Products.ProductID'.'任何想法解決它? – SilenceIsGolden

1

如果您想要產品價格的「總和」,這與您現有的價格非常相似。請注意您目前如何使用COUNT()函數來計算,您可以使用SUM()函數來獲取任意數字列的總和。

事情是這樣的:

SELECT 
    Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    SUM(Products.Price) AS PriceOfOrders 
FROM 
    Orders 
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID 
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY 
    ShipperName 

也許價格還需要通過這個計算量成倍增加?這樣的事情:

SELECT 
    Shippers.ShipperName, 
    COUNT(Orders.OrderID) AS NumberOfOrders, 
    SUM(Products.Price * OrderDetails.Quantity) AS PriceOfOrders 
FROM 
    Orders 
    INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID 
    INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID 
    INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID 
GROUP BY 
    ShipperName 

真的,這取決於你對錶格結構和數據的理解。但是這個概念是相同的,按值分組,並對分組值(計數或總和)應用計算。

+0

這是JNevill在3分鐘前發佈的答案的重複。 –

+0

@DanBracuk:兩個人可能同時得出同樣的結論。你想說什麼? – David