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

SQL查询求助:筛选仅含Pass结果的Serial字段

解决思路与正确SQL写法

你的原SQL逻辑存在问题:先通过WHERE Result='pass'过滤掉了所有Fail的行,此时分组后无法判断该Serial是否存在Fail记录,所以A1、A5这类同时有Pass和Fail的Serial仍会被选中。

要实现只筛选出仅包含Pass结果的Serial,核心是先排除所有存在Fail记录的Serial,再查询这些Serial的Pass结果,以下是几种可行的写法:

方法1:子查询排除含Fail的Serial

SELECT Serial, Result
FROM tbl_Result
WHERE Serial NOT IN (
    -- 先找出所有存在Fail结果的Serial
    SELECT Serial
    FROM tbl_Result
    WHERE Result = 'fail'
)
AND Result = 'pass';

方法2:分组验证无Fail记录

通过分组统计每个Serial的Fail数量,确保为0后再关联原表获取Pass记录:

SELECT r.Serial, r.Result
FROM tbl_Result r
INNER JOIN (
    SELECT Serial
    FROM tbl_Result
    GROUP BY Serial
    -- 统计Fail的数量,等于0说明该Serial没有Fail记录
    HAVING COUNT(CASE WHEN Result = 'fail' THEN 1 END) = 0
) s ON r.Serial = s.Serial
WHERE r.Result = 'pass';

方法3:直接分组筛选

如果你的场景中每个Serial的Pass记录可能有多条,且只需保留Serial和Result(固定为Pass),也可以用这种写法:

SELECT Serial, Result
FROM tbl_Result
GROUP BY Serial, Result
HAVING Result = 'pass' 
   -- 确保该Serial只有一种Result(即Pass)
   AND COUNT(DISTINCT Result) = 1;

以上写法都能排除A1、A5这类同时存在Pass和Fail的Serial,得到你预期的8条记录。

内容的提问来源于stack exchange,提问作者Lim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:00