我已经四处寻找并找到了许多不同的例子,其中没有一个似乎有效。我得到的最接近的是 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更多的是猜测而不是稳定的知识)。
答案 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