You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL筛选同一A值下含空B的全量A、B、C组合?

解决方法:SQL查询符合条件的A对应的所有行

嘿,这个需求我熟,咱们直接一步步搞定它!

首先明确咱们的目标:找出同时满足两个条件的A值,然后输出这些A对应的所有A、B、C组合:

  1. 同一A对应的B值有两个及以上(包括null)
  2. 这些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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:54:09