请问为什么我应该使用CodeA
代替CodeB
来计算百分比?结果完全不同。
非常感谢你的帮助!
CodeA :
select name, round(sum(amount_paid) /
(select sum(amount_paid) from order_items) * 100.0, 2) as pct
from order_items
group by 1
order by 2 desc;
CodeB :
select name, round((amount_paid /
sum(amount_paid)) * 100.0, 2) as pct
from order_items
group by 1
order by 2 desc;
答案 0 :(得分:1)
CodeB 是完全错误的,因为它使用了错误的GROUP BY
语句(amount_paid
列而没有聚合函数)。
如果您尝试使用此查询,严格的数据库将会出现错误。
CodeA 使用子选择(select sum(amount_paid) from order_items)
从表中计算总sum(amount_paid)
,然后使用它来计算每行的百分比。
答案 1 :(得分:0)
如果不知道您正在操作的数据库和数据,很难确定。但我相信SQL中的group by section在select部分之前执行。这意味着在CodeB中我认为记录已经按名称列分组,在amount_paid字段上执行时间sum(amount_paid)。这意味着它将按组而不是所有记录计算记录总和。