我正在关注w3schools的SQL教程。
我想获得托运人交付的所有订单的价值。我不知道如何获取这些细节,因为信息在不同的表中,而INNER JOIN对我没有用。
数据库:http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby 到现在为止,我设法得到每个托运人的订单数量。
defaultConfig { multiDexEnabled true }
我怎样才能得到那些值?
答案 0 :(得分:3)
要将Price
Product
带入您的查询,您需要将表OrderDetails
加入Order
上的Orders.Id
表,然后将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
部分,并在需要时进行聚合。
答案 1 :(得分: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
这完全取决于您对表结构和数据的理解。但概念是相同的,按值分组并将计算应用于分组值(计数或总和)。