51Testing软件测试论坛

标题: 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 子句指定的条件进行过滤,然后再进行汇总处理。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2