group by 分组时,如果高效地统计每一组中某一个字段为null的行数

r_swordsman r_swordsman 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
如下要求:


declare @t table(id int null, qt int null)
insert @t values(2, 10);
insert @t values(2, 20);
insert @t values(2, null);
insert @t values(5, 10);
insert @t values(5, null);
insert @t values(5, 30);
insert @t values(6, 20);
insert @t values(8, null);
insert @t values(11, null);
insert @t values(11, 120);
insert @t values(11, null);
insert @t values(12, null);
insert @t values(12, null);
insert @t values(12, null);
insert @t values(13, 30);
insert @t values(13, 40);
insert @t values(13, 50);


select id, sum(qt) qts, count(*) counts, (select count(*) from @t where id = s.id and qt is null) as nulls from @t s group by id


/*
id qts counts nulls
2 30 3 1
5 40 3 1
6 20 1 0
8 NULL 1 1
11 120 3 2
12 NULL 3 3
13 120 3 0
*/


我需要在分组时统计所有销售单明细中某一个字段为null的行数(为什么要在分组时统计就不说了,不是重点),
如果按照上面的方式,使用嵌套查询,那太慢了,


我想问一下,有没有高效的方法,就是求和sum一样,或和count函数一样,不一定要是系统函数就比如

select id, sum(qt) qts, count(*) counts, (select xxx(*) where qt is null) as nulls from @t s group by id
或
select id, sum(qt) qts, count(*) counts, xxx(xxx) as nulls from @t s group by id



...全文

相关推荐

评论 9
收藏 已收藏
分享
返回顶部
r_swordsman
疑难问题 22,298 成员 121,727 内容