标题: SqlServer聚合函数的疑问 [打印本页] 作者: 测试积点老人 时间: 2019-11-27 10:31 标题: SqlServer聚合函数的疑问 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过滤后不都没有数据吗?
作者: bellas 时间: 2019-11-28 09:17
没有group by,相当于是先执行:select * from #Test with(nolock) where id = 3,结果是带列的空数据,实际是一个对象,空对象,然后在执行求和函数,那么用空对象执行求和函数肯定就是null了。
有group by,相当于是先求和,再分组,那么求和后结果是null,你对结果是null的数据分组,结果肯定就是空。 作者: qqq911 时间: 2019-11-28 11:25
查询是空的,就没有返回作者: 海海豚 时间: 2019-11-28 11:35
参考下这个https://q.cnblogs.com/q/122080/作者: jingzizx 时间: 2019-11-28 12:10
参考2楼的解答作者: litingting0214 时间: 2019-11-28 12:55
同时使用where 和group by 进行汇总处理时,会先根据 WHERE 子句指定的条件进行过滤,然后再进行汇总处理。