SQL内部连接多个表并进行计算

时间:2018-11-06 04:09:41

标签: sql

您好,我想通过比较1996年10月和1996年9月的产品收入来找出收入增长最快的前3种产品和收入下降最多的前3种产品。

我使用的数据集位于w3c's online platform,所需的数据在以下3个表中:“订单”,“ OrderDetails”,“产品”。理想情况下,我希望能够在w3c平台上运行代码。

到目前为止,我可以在1996年9月输出Orders数据。如何向其中插入1996年10月的Orders数据并计算收入变化?

SELECT 
  od.ProductID, 
  MIN(o.OrderDate) as SalesStart, 
  MAX(o.OrderDate) as SalesEnd, 
  SUM(od.Quantity) as SoldQty, 
  SUM(od.Quantity * p.Price) as SoldAmt, 
  SUM(od.Quantity * p.Price) * 1.0 / 
  (
    SELECT SUM(odAll.Quantity * pAll.Price) 
    FROM OrderDetails odAll 
    INNER JOIN Orders as oAll 
      ON oAll.OrderID = odAll.OrderID
    INNER JOIN Products as pAll
      ON odAll.ProductID =  pAll.ProductID
    WHERE oAll.OrderDate LIKE '1996-09%') as PortionInTotalSales
FROM Orders as o
INNER JOIN OrderDetails as od
  ON o.OrderID = od.OrderID
INNER JOIN Products as p
  ON od.ProductID =  p.ProductID  
WHERE o.OrderDate LIKE '1996-09%'
GROUP BY od.ProductID

2 个答案:

答案 0 :(得分:0)

在WHERE子句中使用BETWEEN语句:WHERE o.OrderDate BETWEEN'1996-09-01'和'1996-10-31'w3schools.com/sql/sql_between.asp

    SELECT 
  od.ProductID, 
  MIN(o.OrderDate) as SalesStart, 
  MAX(o.OrderDate) as SalesEnd, 
  SUM(od.Quantity) as SoldQty, 
  SUM(od.Quantity * p.Price) as SoldAmt, 
  SUM(od.Quantity * p.Price) * 1.0 / 
  (
    SELECT SUM(odAll.Quantity * pAll.Price) 
    FROM OrderDetails odAll 
    INNER JOIN Orders as oAll 
      ON oAll.OrderID = odAll.OrderID
    INNER JOIN Products as pAll
      ON odAll.ProductID =  pAll.ProductID
    WHERE oAll.OrderDate BETWEEN '1996-09-01' and '1996-10-31') as PortionInTotalSales
FROM Orders as o
INNER JOIN OrderDetails as od
  ON o.OrderID = od.OrderID
INNER JOIN Products as p
  ON od.ProductID =  p.ProductID  
WHERE o.OrderDate BETWEEN '1996-09-01' and '1996-10-31'
GROUP BY od.ProductID

答案 1 :(得分:0)

我可能会在这里参加工会。这是一个查询,该查询应该适用于MySQL,但不一定适用于其他数据库。

test