如何筛选同Code下仅对应唯一City值的数据表记录
问题描述
需要对包含Code、City两个字段的数据表执行筛选,筛选规则:若同一个Code对应多个不同的City值,则该Code下的所有记录都不选中,仅保留所有关联City完全一致的Code对应的记录。
原始表数据
| Code | City |
|---|---|
| 3 | MYS |
| 3 | NYR |
| 3 | STA |
| 4 | MYS |
| 4 | MYS |
| 5 | MYS |
期望输出结果
| Code | City |
|---|---|
| 4 | MYS |
| 5 | MYS |
实现方法
核心思路:先按Code分组,统计每个Code对应的去重City数量,仅保留数量为1的Code关联的所有记录。
SQL实现
写法1:子查询关联(兼容性最强,支持所有主流SQL数据库)
SELECT t.Code, t.City FROM 你的表名 t JOIN ( SELECT Code FROM 你的表名 GROUP BY Code HAVING COUNT(DISTINCT City) = 1 ) valid_code ON t.Code = valid_code.Code
注意:统计时必须使用
COUNT(DISTINCT City),不能直接用COUNT(City)或者COUNT(*),否则会把Code=4这类同城市有多条重复记录的合法数据误排除。
写法2:窗口函数写法(语法更简洁,支持MySQL 8.0+、PostgreSQL、SQL Server等支持窗口函数的数据库)
SELECT Code, City FROM ( SELECT *, COUNT(DISTINCT City) OVER (PARTITION BY Code) AS unique_city_cnt FROM 你的表名 ) tmp WHERE unique_city_cnt = 1
Pandas实现(Python场景)
如果是用Python pandas处理表格数据,可使用以下代码:
import pandas as pd # df为原始数据表变量 # 先筛选出仅对应1个唯一城市的Code valid_codes = df.groupby('Code')['City'].nunique()[lambda x: x == 1].index # 匹配拿到最终结果 result = df[df['Code'].isin(valid_codes)]
内容的提问来源于stack exchange,提问作者CodingLover
相关产品推荐
相关产品推荐

