数据库中isnull函数和sum函数先后顺序的区别

举例

表数据

RowID TotalAmount
1 NULL
2 100.00
建表语句
CREATE TABLE [Amount](
	[RowID] [bigint] IDENTITY(1,1) NOT NULL,
	[TotalAmount] [decimal](18, 2) NULL
) ON [PRIMARY]

INSERT [Amount] ([RowID], [TotalAmount]) VALUES (1, NULL)
INSERT [Amount] ([RowID], [TotalAmount]) VALUES (2, 100.00)
select SUM(TotalAmount) as SumAmount from Amount -- 100.00

select ISNULL(SUM(TotalAmount),0) as SumAmount from Amount -- 100.00
select SUM(ISNULL(TotalAmount,0)) as SumAmount from Amount -- 100.00

-- 查询的条件表里不存在
select ISNULL(SUM(TotalAmount),0) as SumAmount from Amount where RowID=3 -- 0.00
select SUM(ISNULL(TotalAmount,0)) as SumAmount from Amount where RowID=3 -- NULL

sum的工作原理

由于sum是在对列进行相加的时候会在对值为null的行跳过,若单独使用sum函数时只有null数据的时候会跳过这些数据返回null,而没有数据进行sum的时候也会返回null

结论

在sum有数据的时候,isnull在sum的外面和isnull在sum的里面是没有区别的,
sum函数没有数据的时候,则需要将isnull函数放在外面防止sum的无数据的时候isnull不起作用。

使用时,当不希望返回值含有NULL时,写成ISNULL(SUM(字段),0)

posted @ 2023-01-13 16:31  KeepChasing  阅读(238)  评论(0编辑  收藏  举报