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

如何修正SQL查询以筛选状态全为Active/Approved的分组?

问题与解决方案

数据表格

Group_NoIdStatus
1101Active
1102Active
2201Active
2202Approved
2203Active
3301Inactive
3302Active
4401Denied
4402Denied

需求

筛选出所有成员的Status字段值均为Active或Approved的Group_No,期望输出分组1和2。

原查询问题分析

你尝试的SQL查询:

select group_no
from <table>
where status in ('Active','Approved') 
group by group_no 
having(count(distinct status)) = 1;

错误在于having(count(distinct status)) = 1这个条件——它要求分组内只有一种状态值,因此会排除同时包含Active和Approved的分组2,不符合需求。

可行解决方案

方案1:使用NOT EXISTS子查询

通过子查询排除存在不符合状态的分组:

SELECT group_no
FROM <table> t_main
WHERE NOT EXISTS (
    SELECT 1
    FROM <table> t_sub
    WHERE t_sub.group_no = t_main.group_no
      AND t_sub.status NOT IN ('Active', 'Approved')
)
GROUP BY group_no;

方案2:使用HAVING统计不符合状态的数量

通过CASE语句统计分组内不符合条件的记录数,确保数量为0:

SELECT group_no
FROM <table>
GROUP BY group_no
HAVING SUM(CASE WHEN status NOT IN ('Active', 'Approved') THEN 1 ELSE 0 END) = 0;

方案3:使用EVERY函数(部分数据库支持,如PostgreSQL)

如果你的数据库支持EVERY聚合函数,可以直接判断分组内所有记录都满足条件:

SELECT group_no
FROM <table>
GROUP BY group_no
HAVING EVERY(status IN ('Active', 'Approved'));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:25:15