SQL百分比语法

时间:2017-04-11 09:06:23

标签: sql

请问为什么我应该使用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;

2 个答案:

答案 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)。这意味着它将按组而不是所有记录计算记录总和。