如何用SQL筛选username分组下id_group全为NULL的行
解决方法:筛选全组id_group均为NULL的行
嘿,这需求很明确,要找出那些整个username分组里所有id_group值都是NULL的记录对吧?我给你两种实用的SQL写法,你可以根据自己的场景选:
方法一:子查询+分组筛选
这种方法逻辑直观,先找出符合条件的username分组,再关联原表取数据:
SELECT t.username, t.id_group FROM your_table t WHERE t.username IN ( SELECT username FROM your_table GROUP BY username HAVING MAX(id_group) IS NULL );
逻辑说明:
- 子查询里通过
GROUP BY username对每个用户分组,HAVING MAX(id_group) IS NULL是关键:因为MAX函数会自动忽略NULL值,只有当分组里所有id_group都是NULL时,MAX的结果才会是NULL,这样就筛选出了我们要的username。 - 外层查询再取出这些username对应的所有行。
方法二:窗口函数(更高效)
如果你的表数据量比较大,窗口函数的写法通常性能更好,不需要多次扫描表:
SELECT username, id_group FROM ( SELECT username, id_group, MAX(id_group) OVER (PARTITION BY username) AS max_group_id FROM your_table ) sub_query WHERE max_group_id IS NULL;
逻辑说明:
- 内层查询用
MAX(id_group) OVER (PARTITION BY username)给每一行计算出所属username分组的最大id_group值。 - 外层直接过滤掉那些
max_group_id不为NULL的行,剩下的就是全组id_group都是NULL的记录。
注意:记得把代码里的
your_table替换成你实际使用的表名哦!
内容的提问来源于stack exchange,提问作者Ruchita Sheth
相关产品推荐
相关产品推荐

