Sql 从总计中找出每行的平均值
我有一个包含以下列的销售表Sql 从总计中找出每行的平均值,sql,sql-server-2008,average,Sql,Sql Server 2008,Average,我有一个包含以下列的销售表sale 销售|标识|部门|总金额| select Department ,sum(si.GrossPrice) gross_amt from Sale si group by Department order by Department 我需要从总销售额中找出每个部门的平均销售额 例如: 表格 sale_id Department gross_amount 1 A 10 2
sale
销售|标识|部门|总金额|
select Department ,sum(si.GrossPrice) gross_amt
from Sale si
group by Department
order by Department
我需要从总销售额中找出每个部门的平均销售额
例如:
表格
sale_id Department gross_amount
1 A 10
2 B 30
3 A 25
4 c 5
Desired output
Department Gross_amount avg
A 35 50 --(35/70)*100
B 30 42.86 --(30/70)*100
C 5 7.14 --(5/70) *100
ie是部门平均值=(部门总数/总数)*100
例:部门总数A=35
总计=A+B+C=35+30+5=70
我能找到最多的总金额
select Department ,sum(si.GrossPrice) gross_amt
from Sale si
group by Department
order by Department
为了得到平均值,我试着跟随
select Department ,sum(si.GrossPrice) gross_amt,
AVG(sum(si.GrossPrice)) avg
from Sale si
group by Department
order by Department
这给了我一个错误
无法对包含
聚合或子查询
此外,我也不确定我是否可以通过上述查询获得预期的平均值。如何达到相同的效果。将分组总和除以总和:
SELECT Department ,
[Gross_amount] = SUM(gross_amount),
[avg] = ROUND(CAST(SUM(gross_amount) AS DECIMAL(10,2))/
CAST((SELECT SUM(gross_amount) FROM tab) AS DECIMAL(10,2)) * 100
,2)
FROM tab
GROUP BY Department
ORDER BY Department
如果您想知道每个部门的总人数占总人数的比例,我建议使用窗口功能:
SELECT Department, SUM(gross_amount) as gross_amount
SUM(gross_amount)*100.0 / SUM(SUM(gross_amount)) over () as propotion
FROM tab
GROUP BY Department
ORDER BY Department;
你能纠正你的问题,在相同的列名中使用相同的列名,并解释为什么你总是被100除吗?@Amit我编辑了我的问题。被100.0除是为了在答案中得到两个小数点……我删除了它以避免混淆Sachu,请不要着急。慢慢来,决定:总量,总量还是总量?部门平均还是平均?部门总数是多少?总数是多少?fiddle可以很好地作为我想要的输出。但是当我在我的表上应用时,我得到了将int转换为数据类型numeric时的
算术溢出错误。
error@Sachu更改为十进制(10,2),然后重试。我更新了我的回答建议,但我不能使用带窗口覆盖功能的四舍五入或转换(十进制(10,2))。它给出了error@Sachu…这应该无关紧要。您的语法可能有错误。