如何查询数据表中STATE字段无0值的对应AID记录
原始数据表
| AID | BID | STATE |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 2 | 3 |
| 1 | 3 | 3 |
| 2 | 1 | 0 |
| 2 | 2 | 3 |
| 2 | 3 | 3 |
| 3 | 1 | 3 |
| 3 | 2 | 0 |
| 3 | 3 | 3 |
需求说明
筛选所有关联记录的STATE字段均不存在0值的AID,示例场景下符合条件的AID为1,以下是不同场景的实现方案:
1. SQL 实现
方案1:分组聚合判断(性能更优,推荐)
对AID分组后统计分组内STATE=0的记录数,筛选计数为0的AID即可:
SELECT AID FROM 表名 GROUP BY AID HAVING COUNT(CASE WHEN STATE = 0 THEN 1 END) = 0;
适配MySQL的简化写法:
SELECT AID FROM 表名 GROUP BY AID HAVING SUM(STATE = 0) = 0;
方案2:反向排除
先查询所有存在STATE=0的AID,再取不在该集合内的AID:
SELECT DISTINCT AID FROM 表名 WHERE AID NOT IN ( SELECT DISTINCT AID FROM 表名 WHERE STATE = 0 );
2. Python Pandas 实现
假设数据已加载为DataFrame对象df:
# 方法1:分组过滤 valid_aids = df.groupby('AID').filter(lambda x: (x['STATE'] != 0).all())['AID'].unique() # 方法2:反向排除 invalid_aids = df[df['STATE'] == 0]['AID'].unique() valid_aids = df[~df['AID'].isin(invalid_aids)]['AID'].unique()
3. Excel 实现
- 新增辅助列D,D2单元格输入公式
=IF(C2=0,A2,"")(假设AID在A列,STATE在C列),下拉填充全表 - 提取A列所有唯一AID到单独列
- 对每个唯一AID,用公式
=COUNTIF(D:D, 目标AID单元格)=0判断,返回TRUE即为符合条件的AID
内容的提问来源于stack exchange,提问作者Mert
相关产品推荐
相关产品推荐

