如何将产品的订单金额汇总为一行

Posted

技术标签:

【中文标题】如何将产品的订单金额汇总为一行【英文标题】:How do i aggregate the order amount for the products into one row 【发布时间】:2017-04-08 12:51:15 【问题描述】:

使用 Adventureworks 数据库,我想返回每种产品的订购总额。提出了 2 个查询,但对如何将每个产品的总金额汇总到一行感到困惑。第一个查询返回每个产品 ID 的多个订单和金额。添加了“汇总”子句,但现在返回 NULL 值。汇总是在这里使用的正确函数吗?我如何将订购的每种产品的总量放入一个结果行?我是不是太复杂了……谢谢!

第一个查询:

select p.productid, p.name, sum(od.unitprice - od.unitpricediscount) *  
       od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID = od.ProductID
group by p.productid, p.name, od.UnitPrice, od.UnitPriceDiscount,   
od.OrderQty
order by p.productid;

返回样本:

707 Sport-100 Helmet, Red   93.573
707 Sport-100 Helmet, Red   77.9775
707 Sport-100 Helmet, Red   150.4989
707 Sport-100 Helmet, Red   200.6652
707 Sport-100 Helmet, Red   313.7231
707 Sport-100 Helmet, Red   3754.689
707 Sport-100 Helmet, Red   1986.8716
707 Sport-100 Helmet, Red   1469.58

第二次查询:

select p.productid, p.name, sum(od.unitprice - od.unitpricediscount) * 
od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID = od.ProductID
group by p.productid, rollup(p.name), od.UnitPrice, od.UnitPriceDiscount,  
od.OrderQty
order by p.productid;

返回集示例:

707 NULL    187.146
707 NULL    124.764
707 NULL    249.528
707 NULL    167.221
707 NULL    200.6652
707 NULL    313.7231
707 NULL    383.89
707 NULL    1635.1065

【问题讨论】:

试过但收到错误:Msg 8120, Level 16, State 1, Line 4 列 'sales.SalesOrderDetail.OrderQty' 在选择列表中无效,因为它不包含在聚合函数或GROUP BY 子句。 预期结果是将 productid 总数聚合到一行中。 ProdID 707 = 所有产品的总金额等等。 搞清楚了。忘记包装我的选择列表 = 愚蠢的初学者错误 【参考方案1】:

问题是您的分组依据包含价格和折扣,因此不会进行汇总。试试这个:

select p.productid, p.name, sum(od.unitprice - 
od.unitpricediscount) *  
       od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID = 
od.ProductID
group by p.productid, p.name
order by p.productid;

【讨论】:

就是这样,再加上我没有将 sum 函数包装为聚合。

以上是关于如何将产品的订单金额汇总为一行的主要内容,如果未能解决你的问题,请参考以下文章

MySQL与EXCEL sum sumif sumifs 函数结合_品牌汇总_20161101

如何捕获部分金额

SQL语句统计每天、每月、每年的销售总额

阿里云年中618大礼包如何领取及使用方法!

阿里云年中618大礼包如何领取及使用方法!

如何汇总用户支付的所有金额