MySQL查询需求:按条件筛选snom列并排除指定值
数据筛选需求与解决方案
原始数据
| pnom | ocinka | snom |
|---|---|---|
| 2 | 3 | 6 |
| 3 | 4 | 1 |
| 3 | 4 | 1 |
| 3 | 2 | 6 |
| 3 | 5 | 3 |
| 3 | 3 | 7 |
| 3 | 3 | 7 |
| 4 | 5 | 3 |
筛选条件
- pnom列的值必须为3
- ocinka列的值不能为3
- 排除所有ocinka为3的行对应的snom值
预期结果
snom值:1、6、3(顺序不限),排除7
解决方案
1. SQL实现
通过子查询先锁定需排除的snom值,再结合核心筛选条件查询:
SELECT DISTINCT snom FROM your_table WHERE pnom = 3 AND ocinka != 3 AND snom NOT IN (SELECT snom FROM your_table WHERE ocinka = 3);
2. Pandas实现(Python)
通过两步筛选完成需求:
import pandas as pd # 构造数据(实际场景可替换为读取数据源) df = pd.DataFrame({ 'pnom': [2,3,3,3,3,3,3,4], 'ocinka': [3,4,4,2,5,3,3,5], 'snom': [6,1,1,6,3,7,7,3] }) # 提取需排除的snom值集合 excluded_snom = df[df['ocinka'] == 3]['snom'].unique() # 执行筛选并去重 result = df[(df['pnom'] == 3) & (df['ocinka'] != 3) & (~df['snom'].isin(excluded_snom))]['snom'].unique() print(result) # 输出:[1 6 3]
内容的提问来源于stack exchange,提问作者Kaharka
相关产品推荐
相关产品推荐

