Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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中的SUM函数给出了不正确的输出_Sql_Sql Server - Fatal编程技术网

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是一个变量,其值根据我们的数据提供。这些是用于计算平均值的权重,与元组的数量无关。好的,我将其更改以反映这一点。当然,现在是您最初发布的完全相同的查询,尽管我对您的相同数据得到了不同的结果。还有一个更改,您可以看到我使用的是您提供的相同数据。我猜你最初的查询有更多的地方会把你的结果搞砸。是的,你是对的。它本质上是一些最初的查询弄乱了我的结果。谢谢