如何编写SQL代码实现按ID归类数据所属区域(多区域标记)
解决方案
这是个典型的分组聚合加条件判断的SQL需求,我给你写个能直接用的代码,还会拆解下逻辑:
假设你的第一张表叫id_country(存储ID与Country字段),第二张临时区域表叫temp_region,对应的SQL代码如下:
SELECT ic.ID, CASE WHEN COUNT(DISTINCT tr.Region) = 1 THEN MAX(tr.Region) ELSE '多区域' END AS Region FROM id_country ic INNER JOIN temp_region tr ON ic.Country = tr.Country GROUP BY ic.ID ORDER BY ic.ID;
代码逻辑拆解:
- 表关联:用
INNER JOIN通过Country字段把两张表连接,这样每个ID对应的所有Country的区域信息就都能获取到了。 - 分组统计:按
ID分组后,用COUNT(DISTINCT tr.Region)统计每个ID下有多少种不同的区域——这是判断结果的核心依据。 - 条件输出:如果统计出的不同区域数是1,就取这个唯一的区域名(用
MAX是因为分组后只要是唯一值,MAX/MIN都能拿到,选哪个都可以);如果大于1,就输出“多区域”。 - 排序:最后加
ORDER BY ic.ID是为了让结果和你预期的输出顺序一致,看起来更规整。
把你提供的测试数据代入后,得到的结果完全符合预期:
- ID=1 → 仅对应APAC区域,输出APAC
- ID=2 → 对应APAC和EMEA两个区域,输出“多区域”
- ID=3 → 对应LATAM和APAC两个区域,输出“多区域”
- ID=4 → 仅对应APAC区域,输出APAC
内容的提问来源于stack exchange,提问作者user5572765
相关产品推荐
相关产品推荐

