如何计算在SQL中多次购买的发票的Grand Totals

时间:2015-11-28 03:43:13

标签: sql oracle group-by

我正在处理的作业的一个查询是:“创建一个计算购买总金额的查询,并显示与每个订单的购买相关的客户ID和客户名称。”我创建了分配所需的所有表,并完成了前2个查询没问题。但是对于第三个查询,我能够计算每个购买的总数,但是当我在价格前面使用SUM时,无法让它给出订单中每个购买的总数计算它给了我“不是单组组功能”或当我尝试使用GROUP BY时它说“不是GROUP BY函数”。

我使用了此代码:

SELECT (i.ItemPrice * t.ItemQty) AS Purchase_Total, o.OrderID, c.CustomerID, c.CustomerName
FROM pillmanb1_Orders o, pillmanb1_Items i, pillmanb1_Transactions t, pillmanb1_Customers c
WHERE o.CustomerID = c.CustomerID
AND i.ItemID = t.ItemID
AND o.OrderID = t.OrderID;

得到这个答案:

First Attempt

但我真正需要的是:

Correct Prediction

我知道这对你们来说可能很容易,但我很感激帮助!! 谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用analytic functions来实现此目标

获得总计: sum(i.ItemPrice * t.ItemQty) over () as Grand_Purchase_Total

按订单获取小计: sum(i.ItemPrice * t.ItemQty) over (partition by o.OrderID) as Grand_Order_Total

SELECT distinct (i.ItemPrice * t.ItemQty) AS Purchase_Total
  , sum(i.ItemPrice * t.ItemQty) over () as Grand_Purchase_Total
  , sum(i.ItemPrice * t.ItemQty) over (partition by o.OrderID) as Grand_Order_Total
  , o.OrderID, c.CustomerID, c.CustomerName
FROM pillmanb1_Orders o
   , pillmanb1_Items i
   , pillmanb1_Transactions t
   , pillmanb1_Customers c
WHERE o.CustomerID = c.CustomerID
AND i.ItemID = t.ItemID
AND o.OrderID = t.OrderID;