计算总和

时间:2016-08-19 08:49:01

标签: sql sql-server group-by

我已经四处寻找并找到了许多不同的例子,其中没有一个似乎有效。我得到的最接近的是 over(),但由于语法错误而失败。

请考虑以下问题。

select Id, 
  count(*) as Count, 
  sum(Amount) as Sum
from MyTable
group by Id

结果是 Id 的列表,其中包含出现次数和已安装的值。这非常有效。但是,我还想表明每笔金额中的大部分是多少。我尝试了以下内容。

select Id, 
  count(*) as Count, 
  sum(Amount) as Sum,
  sum(Amount) / sum(Amount) over() as Ratio
from MyTable
group by Id

它失败了,我不确定如何解决它(主要是因为 over thingy更多的是猜测而不是稳定的知识)。

1 个答案:

答案 0 :(得分:2)

您需要检索所有记录的总金额,您可以使用以下方法执行此操作:

SELECT sum(Amount) FROM MyTable

并将其作为查询中sum(Amount)的除数。因此,您的查询将如下所示:

select   Id, 
         count(*) as Count, 
         sum(Amount) as Sum,
         sum(Amount) / (SELECT sum(Amount) FROM MyTable) as Ratio
from     MyTable
group by Id

如果您的Amount数据类型为INT,则可能需要将比率转换为decimal数据类型。例如:

select   Id, 
         count(*) as Count, 
         sum(Amount) as Sum,
         CAST (sum(Amount) AS NUMERIC(10,2)) / (SELECT sum(Amount) FROM MyTable) as Ratio
from     MyTable
group by Id

[编辑]:如果你想使用OVER条款,我建议你再增加一个子查询:

SELECT   [Id], [Count], [Sum], [SUM] / SUM([SUM]) OVER (PARTITION BY 1)
FROM
(
         select   Id,
                  count(*) as Count, 
                  sum(Amount) as Sum            
         from     MyTable
         group by Id
) as t
相关问题