通过3个表获取信息

时间:2016-06-16 16:04:30

标签: mysql sql

我正在关注w3schools的SQL教程。

我想获得托运人交付的所有订单的价值。我不知道如何获取这些细节,因为信息在不同的表中,而INNER JOIN对我没有用。

数据库:http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_groupby 到现在为止,我设法得到每个托运人的订单数量。

defaultConfig { multiDexEnabled true }

我怎样才能得到那些值?

2 个答案:

答案 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

这完全取决于您对表结构和数据的理解。但概念是相同的,按值分组并将计算应用于分组值(计数或总和)。