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

如何统计status为X的数据?需排除存在Y状态记录的用户

问题与解决方案

数据表结构

id | user_id | status
1  |  34     |  x
2  |  35     |  x
3  |  42     |  x
4  |  42     |  y

需求说明

需要统计status为x的记录,但只要某个用户存在status为y的记录,该用户所有x状态的记录都不纳入统计。按此规则,原本3条x记录中,用户42的1条x记录需排除,最终统计结果应为2条。

修正后的SQL查询

你提供的SQL存在两处问题:一是未明确过滤status = 'x',二是SELECT *搭配GROUP BY user_id在多数SQL规范下不合法(除非仅需获取分组后的单个用户样本)。根据需求,正确写法如下:

1. 查询所有符合条件的x状态记录

SELECT * 
FROM logs
WHERE user_id NOT IN (SELECT user_id FROM logs WHERE status = 'y')
  AND status = 'x';

2. 统计符合条件的记录总数

如果仅需统计条数,使用COUNT(*):

SELECT COUNT(*) AS valid_x_count
FROM logs
WHERE user_id NOT IN (SELECT user_id FROM logs WHERE status = 'y')
  AND status = 'x';

逻辑说明

子查询SELECT user_id FROM logs WHERE status = 'y'会先筛选出所有存在y状态记录的用户ID,外层查询再排除这些用户,同时保留status为x的记录,完全匹配需求逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:31:35