我有这个SQL查询,其中最重要的功能是返回总销售额SUM(gop.quantity)
。然后我希望它显示这个数字的百分比。如果查询返回了以下3行,那么它应该显示它旁边的百分比 - 如下所示:
查询:
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查询中完成此操作?
答案 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
}}。