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))