如何无需使用聚合函数实现多种族学生数据合并去重?
无需聚合函数的多种族信息合并方案
可以用EXISTS子查询+DISTINCT的组合实现,完全不依赖聚合函数,代码示例如下:
SELECT DISTINCT s.Student_number, CASE WHEN EXISTS ( SELECT 1 FROM students sr2 WHERE sr2.Student_number = s.Student_number AND sr2.racecd <> s.racecd ) THEN 'Multiracial' ELSE s.racecd END AS races FROM students s
逻辑说明
- EXISTS子查询:针对每个学生,检查是否存在其他行的
racecd和当前行不同——如果存在,说明该学生是多种族 - CASE语句:根据子查询结果,多种族返回
Multiracial,单种族返回原racecd - DISTINCT:去重后确保每个学生只显示一行结果
输出示例
Student_Number races 5234 White 4343 Multiracial 4323 Asian
如果你的系统支持窗口函数,还可以用另一种写法(同样无聚合函数):
SELECT DISTINCT Student_number, CASE WHEN COUNT(*) OVER (PARTITION BY Student_number) > 1 THEN 'Multiracial' ELSE racecd END AS races FROM students
不过窗口函数的兼容性可能不如EXISTS方案,优先推荐第一种。
内容的提问来源于stack exchange,提问作者Andrew Smith
相关产品推荐
相关产品推荐

