内部联接多个SQL表并执行计算

内部联接多个SQL表并执行计算,sql,Sql,我需要在1996年9月计算每种产品在总收入中所占的比例。数据在3个表中 表1:订单详情 表2:产品 表3:订单 我想步骤是: 内部将OrderDetails与Order by OrderID连接,以仅显示1996年9月的订单 将步骤1中的结果与ProductID中的Products进行内部连接,并计算每个产品的收入占总收入的百分比 我已经完成了第一步 SELECT Orders.OrderID, Orders.OrderDate, OrderDetails.Quantit

我需要在1996年9月计算每种产品在总收入中所占的比例。数据在3个表中

表1:订单详情

表2:产品

表3:订单

我想步骤是:

内部将OrderDetails与Order by OrderID连接,以仅显示1996年9月的订单 将步骤1中的结果与ProductID中的Products进行内部连接,并计算每个产品的收入占总收入的百分比 我已经完成了第一步

SELECT
    Orders.OrderID,
    Orders.OrderDate,
    OrderDetails.Quantity,
    OrderDetails.ProductID
FROM
    Orders
INNER JOIN
    OrderDetails ON  Orders.OrderID = OrderDetails.OrderID
WHERE
    OrderDate LIKE '1996-09%';
预期结果:

OrderID OrderDate   Quantity    ProductID
-----------------------------------------
10295   1996-09-02   4          56
10296   1996-09-03  12          11
10296   1996-09-03  30          16
10296   1996-09-03  15          69
10297   1996-09-04  60          39
但我不知道怎么做第二步。有什么建议吗?多谢各位

使用窗口功能:

SELECT od.ProductID,
       SUM(od.Quantity),
       SUM(od.Quantity) * 1.0 / SUM(SUM(od.Quantity)) OVER () as ratio
FROM Orders o INNER JOIN
     OrderDetails od
     ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '1996-09-01' AND o.OrderDate < '1996-10-01'
GROUP BY od.ProductID;

看起来W3Cschool的交互式SQL实践不支持窗口函数。此外,我没有找到定义变量的方法,所以不得不两次提到相同的常量年份和月份。在现实生活中,我会建议使用分析函数,或者至少为几个地方使用的值声明一个变量

不管怎样,下面的代码似乎可以满足您的需要:

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

你在用什么数据库管理系统?我在用W3Cschool的交互式SQL实践谢谢!但是我有一个语法错误。它只是说语法错误,并没有具体告诉我错误是什么谢谢,但我想计算每个项目的收入占所有收入的百分比。因此,还需要在“产品”表中使用“价格”列。
OrderID OrderDate   Quantity    ProductID
-----------------------------------------
10295   1996-09-02   4          56
10296   1996-09-03  12          11
10296   1996-09-03  30          16
10296   1996-09-03  15          69
10297   1996-09-04  60          39
SELECT od.ProductID,
       SUM(od.Quantity),
       SUM(od.Quantity) * 1.0 / SUM(SUM(od.Quantity)) OVER () as ratio
FROM Orders o INNER JOIN
     OrderDetails od
     ON o.OrderID = od.OrderID
WHERE o.OrderDate >= '1996-09-01' AND o.OrderDate < '1996-10-01'
GROUP BY od.ProductID;
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