数据库中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)