首页 新闻 赞助 找找看

SqlServer聚合函数的疑问

0
悬赏园豆:50 [待解决问题]

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过滤后不都没有数据吗?

0==1&1==0的主页 0==1&1==0 | 初学一级 | 园豆:79
提问于:2019-11-08 11:56
< >
分享
所有回答(2)
0

没有group by,相当于是先执行:select * from #Test with(nolock) where id = 3,结果是带列的空数据,实际是一个对象,空对象,然后在执行求和函数,那么用空对象执行求和函数肯定就是null了。
有group by,相当于是先求和,再分组,那么求和后结果是null,你对结果是null的数据分组,结果肯定就是空。

龙行天涯 | 园豆:1794 (小虾三级) | 2019-11-08 14:08

不对吧,不应该是先分组,再按分组的数据执行聚合计算吗?

支持(0) 反对(0) 0==1&1==0 | 园豆:79 (初学一级) | 2019-11-09 11:43
0

一楼说的对。
同时使用where 和group by 进行汇总处理时,会先根据 WHERE 子句指定的条件进行过滤,然后再进行汇总处理。--参考《sql基础教程第2版》

爱吃醋的兔子 | 园豆:204 (菜鸟二级) | 2019-11-13 09:54

聚合函数是在select语句里,不是Group By 分组,select聚合吗? 看了下执行计划,两者没什么差别

支持(0) 反对(0) 0==1&1==0 | 园豆:79 (初学一级) | 2019-11-14 14:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册