SqlServer聚合函数的疑问
create table #Test (id int, price decimal(5,2))
insert into #Test(id, price)
values(1,12.4),(2,10.5)
select sum(price) from #Test with(nolock) where id = 3 --返回null
select sum(price) from #Test with(nolock) where id = 3 group by id --什么也不返回
如上的sql,为什么在分组以后,聚合函数没有任何返回值,而不分组却返回null?经过where过滤后不都没有数据吗?
没有group by,相当于是先执行:select * from #Test with(nolock) where id = 3,结果是带列的空数据,实际是一个对象,空对象,然后在执行求和函数,那么用空对象执行求和函数肯定就是null了。
有group by,相当于是先求和,再分组,那么求和后结果是null,你对结果是null的数据分组,结果肯定就是空。