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

如何编写SQL查询:筛选含B/C类型或仅含A类型的行

实现需求的SQL查询方案

针对你的需求,这里提供两种通用的SQL实现方式,适用于大多数主流数据库(如MySQL、PostgreSQL、SQL Server等):

方法一:使用窗口函数

通过窗口函数统计每个编号下B/C类型的行数,再根据统计结果筛选数据:

SELECT Number, Type
FROM (
    SELECT 
        Number, 
        Type,
        -- 统计当前编号下B/C类型的行数
        COUNT(CASE WHEN Type IN ('B', 'C') THEN 1 END) OVER (PARTITION BY Number) AS bc_count
    FROM your_table -- 替换为你的实际表名
) t
-- 筛选规则:有B/C则只留B/C,无B/C则保留A
WHERE (bc_count > 0 AND Type IN ('B', 'C')) OR bc_count = 0;

方法二:使用EXISTS子查询

通过子查询判断当前编号是否存在B/C类型的行,再进行筛选:

SELECT Number, Type
FROM your_table t1 -- 替换为你的实际表名
WHERE 
    -- 直接保留B/C类型的行
    Type IN ('B', 'C')
    -- 或者当前编号不存在任何B/C行时,保留该行(即A类型)
    OR NOT EXISTS (
        SELECT 1 
        FROM your_table t2 
        WHERE t2.Number = t1.Number AND t2.Type IN ('B', 'C')
    );

说明

两种方法都能实现预期结果,你可以根据自己使用的数据库特性和数据规模选择:

  • 窗口函数写法逻辑清晰,适合理解和维护;
  • EXISTS子查询在某些数据库中可能有更好的性能表现,尤其是表数据量较大时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:30:49