如何用SQL筛选同一A值下含空B的全量A、B、C组合?
解决方法:SQL查询符合条件的A对应的所有行
嘿,这个需求我熟,咱们直接一步步搞定它!
首先明确咱们的目标:找出同时满足两个条件的A值,然后输出这些A对应的所有A、B、C组合:
- 同一A对应的B值有两个及以上(包括null)
- 这些B值里至少包含一个null
最终SQL查询语句
SELECT t.* FROM your_table t INNER JOIN ( -- 先筛选出符合条件的A值 SELECT A FROM your_table GROUP BY A HAVING COUNT(B) < COUNT(*) -- 说明该A存在B为null的行(COUNT(B)不统计null,COUNT(*)统计所有行) AND COUNT(*) >= 2 -- 说明该A至少有两行数据(即B值有两个及以上) ) valid_A ON t.A = valid_A.A ORDER BY t.A;
逻辑拆解解释
咱们把子查询的判断条件拆开说:
COUNT(B) < COUNT(*):COUNT(B)会自动忽略B为null的记录,而COUNT(*)会统计该分组下的所有行。当两者数值不等时,就证明这个A对应的行里存在B为null的情况。COUNT(*) >= 2:保证这个A对应的记录数至少有两条,也就是B值(包括null)有两个及以上。
最后把原表和筛选出的有效A值做关联,就能得到所有符合要求的组合了!用你给的测试数据跑这个查询,结果完全和你期望的一致:
A B C
1 2 3
1 null 4
1 2 4
9 3 5
9 null 7
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

