Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从总计中找出每行的平均值_Sql_Sql Server 2008_Average - Fatal编程技术网

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…这应该无关紧要。您的语法可能有错误。