计算SQL Server查询中的百分比

时间:2017-03-29 18:37:58

标签: sql sql-server database

我有这个SQL查询,其中最重要的功能是返回总销售额SUM(gop.quantity)。然后我希望它显示这个数字的百分比。如果查询返回了以下3行,那么它应该显示它旁边的百分比 - 如下所示:

  • unitsSold:2 - 百分比:20%
  • unitsSold:4 - 百分比:40%
  • unitsSold:6 - 百分比:60%

查询:

SELECT TOP 20 
    p.productid, 
    SUM(gop.quantity) AS unitsSold, 
    SUM(gop.price * gop.quantity) AS grossSales, 
    p.productName, gop.picid, gop.picUrl 
FROM 
    product AS p 
LEFT JOIN 
    orderdetail AS gop ON gop.productid = p.productId 
LEFT JOIN 
    Orders AS hedgo ON hedgo.orderid = gop.orderid 
WHERE 
    EXISTS (SELECT * FROM orderdetail AS op 
            WHERE op.orderid = hedgo.orderid) 
GROUP BY 
    p.productid, p.productName, gop.picid, gop.picUrl 
ORDER BY 
    unitsSold DESC

如何在SQL查询中完成此操作?

1 个答案:

答案 0 :(得分:0)

您可以sum()使用over()获取总数:

select top 20 p.productid
 , SUM(gop.quantity) as unitsSold
 , SUM(gop.quantity+.0) / sum(SUM(gop.quantity)) over() as Percentage
 , SUM(gop.price * gop.quantity) as grossSales
 , p.productName
 , gop.picid
 , gop.picUrl
from product as p
  left join orderdetail as gop 
    on gop.productid = p.productId
  left join Orders as hedgo 
    on hedgo.orderid = gop.orderid
where exists (
  select *
  from orderdetail as op
  where op.orderid = hedgo.orderid
  )
group by p.productid
 , p.productName
 , gop.picid
 , gop.picUrl
order by unitsSold desc

我已将+.0添加到sum(gop.quantity),以便如果decimal为{{1},则除法操作将返回int而不是quantity }}。