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

如何查询列A同值分组下所有列B值均为指定值的全部行

实现同组全值匹配的SQL查询方法

核心思路是先筛选出所有列B取值均为指定值的Column A分组,再匹配原表返回对应行即可,以下是3种常见实现方式(示例目标为筛选所有Column B全为failure的分组行,表名为test_table):

方法1:GROUP BY分组子查询 + JOIN匹配

这是兼容性最高的写法,支持所有主流SQL数据库:

SELECT t1.*
FROM test_table t1
-- 先拿到符合条件的Column A值
INNER JOIN (
    SELECT `Column A`
    FROM test_table
    GROUP BY `Column A`
    -- 校验分组内所有Column B都等于目标值
    HAVING COUNT(CASE WHEN `Column B` != 'failure' THEN 1 END) = 0
) t2 ON t1.`Column A` = t2.`Column A`;

你也可以把HAVING条件替换为MAX(Column B) = 'failure' AND MIN(Column B) = 'failure',逻辑等价:如果组内所有值相同,最大值和最小值必然相等。

方法2:窗口函数实现

适合支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等),不需要多表关联:

WITH group_check AS (
    SELECT 
        *,
        -- 统计每个Column A分组内不符合要求的行数
        COUNT(CASE WHEN `Column B` != 'failure' THEN 1 END) OVER (PARTITION BY `Column A`) AS unqualified_count
    FROM test_table
)
SELECT `Column A`, `Column B`
FROM group_check
-- 不符合行数为0即代表组内全部符合要求
WHERE unqualified_count = 0;

方法3:NOT EXISTS实现

如果Column A建了索引,这个写法的性能表现会更优:

SELECT t1.*
FROM test_table t1
WHERE NOT EXISTS (
    -- 校验不存在同分组下不符合要求的行
    SELECT 1
    FROM test_table t2
    WHERE t2.`Column A` = t1.`Column A`
      AND t2.`Column B` != 'failure'
);

注意事项

如果你的Column B存在NULL值,需要调整判断条件避免NULL比较失效,比如把Column B != 'failure'改为COALESCE(Column B, '') != 'failure'即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:15:03