Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server SUM(var1和var2)返回什么?_Sql Server_Tsql - Fatal编程技术网

Sql server SUM(var1和var2)返回什么?

Sql server SUM(var1和var2)返回什么?,sql-server,tsql,Sql Server,Tsql,我正在进行分组,并尝试了以下方法: declare @toErase table ( Group1 int, Num int, Denom int ) insert into @toErase select 1, 1, 5 insert into @toErase select 1, 3, 36 insert into @toErase select 1, 4, null insert into @toErase select 1, null, 15 select su

我正在进行分组,并尝试了以下方法:

declare @toErase table
(
    Group1 int,
    Num int,
    Denom int
)
insert into @toErase select 1, 1, 5
insert into @toErase select 1, 3, 36
insert into @toErase select 1, 4, null
insert into @toErase select 1, null, 15

select sum(num + denom) from @toErase group by group1

-- Returns 45
返回45。45是从哪里来的

另一方面,
select sum(num)+sum(denom)from@toErase group by group1
返回正确的值

谢谢。

它来自:

row1: 1+5 = 6
row2: 3+36 = 39
row3: 4+null = null
row4: null+15 = null
SUM
忽略空值,因此结果为6+39=45

使用
ISNULL
COALESCE
将空值替换为默认值(可能为0),从而在
+
操作中有效地忽略它们。

它来自:

row1: 1+5 = 6
row2: 3+36 = 39
row3: 4+null = null
row4: null+15 = null
SUM
忽略空值,因此结果为6+39=45


使用
ISNULL
COALESCE
将空值替换为默认值(可能为0),从而在
+
操作中有效地忽略它们。

非空值与空值之和为空


因此,4+null和null+15都会导致null,并且它们被
忽略非null值与null值之和为null


因此,4+null和null+15都会导致null,它们被输出中的
SUM
忽略,因为如果使用
null
执行加法,结果将是
null
,因此,对第三行和第四行的操作结果为
NULL
,并从
sum()
中排除

如果希望包括此类情况,则在两列上添加
COALESCE()
,以返回
0
,而不是
NULL
,作为添加操作的参数:

select sum(coalesce(num,0) + coalesce(denom,0)) from @toErase group by group1

这可能会给您预期的
64

您在输出中得到
45
,因为如果使用
NULL
执行加法,结果将是
NULL
,因此对第三行和第四行的操作结果是
NULL
,并从
sum()
中排除

如果希望包括此类情况,则在两列上添加
COALESCE()
,以返回
0
,而不是
NULL
,作为添加操作的参数:

select sum(coalesce(num,0) + coalesce(denom,0)) from @toErase group by group1
这可能会给您预期的
64

(1+5)=>6

(3+36)=>39

4+null=>null
注意:NULL表示加法为NULL

null+15=>null 注意:NULL表示加法为NULL

所以6+39=>45
注意:sum()忽略null(1+5)=>6

(3+36)=>39

4+null=>null
注意:NULL表示加法为NULL

null+15=>null 注意:NULL表示加法为NULL

所以6+39=>45

注意:sum()忽略null

如果对null和整数求和,结果为null

如果希望将null视为0,则始终可以使用ISNULL命令将null整数默认为其他值(我的示例将null替换为0):


这将返回64。

如果对null和整数求和,结果为null

如果希望将null视为0,则始终可以使用ISNULL命令将null整数默认为其他值(我的示例将null替换为0):


这将返回64。

由于要使用SUM的“其他行”列中的NULL,SUM仅保留这两行:

insert into @toErase select 1, 1, 5
insert into @toErase select 1, 3, 36

因此,您得到:1+5+36+3=45

由于要使用SUM的“其他行”列中的NULL,您的SUM仅保留这两行:

insert into @toErase select 1, 1, 5
insert into @toErase select 1, 3, 36

因此得到:1+5+36+3=45

结果是因为SUM忽略了空值,例如4+null=null,因此在最终的SUM中不考虑

1+5 = 6
3+36 = 39
4+null = null
null+15 = null
所以,6+39=45。也许COALESCE()可以帮助您

您可以尝试以下方法:


从@toErase GROUP BY group1中选择SUM(COALESCE(num,0)+COALESCE(denom,0)),结果是SUM忽略了null值,例如4+null=null,因此在最终的SUM中不被考虑

1+5 = 6
3+36 = 39
4+null = null
null+15 = null
所以,6+39=45。也许COALESCE()可以帮助您

您可以尝试以下方法:

从@toErase GROUP BY group1中选择SUM(COALESCE(num,0)+COALESCE(denom,0))