sql中的SUM函数给出了不正确的输出
我有一个包含以下数据的表sql中的SUM函数给出了不正确的输出,sql,sql-server,Sql,Sql Server,我有一个包含以下数据的表##Temp2: Rownumber Percentage 1 100.0000 2 50.0000 3 16.6667 4 14.2857 5 14.2857 6 14.2857 1 100.0000 4 20.0000 5 20.0000 6 20.0000 1 100.0000 2 100.0000 4 14
##Temp2
:
Rownumber Percentage
1 100.0000
2 50.0000
3 16.6667
4 14.2857
5 14.2857
6 14.2857
1 100.0000
4 20.0000
5 20.0000
6 20.0000
1 100.0000
2 100.0000
4 14.2857
5 14.2857
6 14.2857
我对上表进行了SQL查询:
select SUM(Percentage) as SUM , @cnt as Count , (SUM(Percentage)/@cnt)
as Percentage from ##Temp2 group By RowNumber order by Percentage desc
结果如下:
SUM Count Percentage
200.0000 3 66.66666
50.0000 3 16.66667
34.2857 3 11.42857
34.2857 3 11.42857
34.2857 3 11.42857
16.6667 3 5.555567
我可以清楚地看到,SUM
列计算错误。
例如:行数1
的SUM
列的值应为300
,因为我在百分比列上使用了按行数分组
和SUM
聚合函数
这是为什么?我该如何处理这一问题以使其正确?试试这个:
create table ##Temp2 (
Rownumber int,
Percentage float
)
insert ##Temp2 select 1, 100.0000
insert ##Temp2 select 2, 50.0000
insert ##Temp2 select 3, 16.6667
insert ##Temp2 select 4, 14.2857
insert ##Temp2 select 5, 14.2857
insert ##Temp2 select 6, 14.2857
insert ##Temp2 select 1, 100.0000
insert ##Temp2 select 4, 20.0000
insert ##Temp2 select 5, 20.0000
insert ##Temp2 select 6, 20.0000
insert ##Temp2 select 1, 100.0000
insert ##Temp2 select 2, 100.0000
insert ##Temp2 select 4, 14.2857
insert ##Temp2 select 5, 14.2857
insert ##Temp2 select 6, 14.2857
select * from ##Temp2
declare @cnt int = 3
select SUM(Percentage) as SUM,
@cnt as Count ,
(SUM(Percentage) / @cnt) as Percentage
from ##Temp2
group By Rownumber
order by Percentage desc
drop table ##Temp2
返回:
SUM Count Percentage
300 3 100
150 3 50
48.5714 3 16.1904666666667
48.5714 3 16.1904666666667
48.5714 3 16.1904666666667
16.6667 3 5.55556666666667
如果您的临时表有这两列,而这是SQL Server,那么您的查询应该会给您一个错误,因为它不允许您按
百分比排序
在我的末尾没有任何错误,我可以做到这一点。是的,它是SQL Server。我怀疑您的源表中没有您认为它拥有的数据(或者您的查询比发布的数据更多)。如果缺少第三组数字,则总和是正确的。我无法在sqlfiddle:上重现您的结果。你能用fork和edit来匹配你看到的结果吗?不管怎样,你在存储过程中使用了一个全局临时表,你怎么知道里面的数据没有变化呢?不,实际上,我根本没有寻找Count(*)。cnt是一个变量,其值根据我们的数据提供。这些是用于计算平均值的权重,与元组的数量无关。好的,我将其更改以反映这一点。当然,现在是您最初发布的完全相同的查询,尽管我对您的相同数据得到了不同的结果。还有一个更改,您可以看到我使用的是您提供的相同数据。我猜你最初的查询有更多的地方会把你的结果搞砸。是的,你是对的。它本质上是一些最初的查询弄乱了我的结果。谢谢