SQL查询实现:筛选曾在不同房间参加面试的人员姓名
正确SQL写法
SELECT Name FROM worktable GROUP BY Name HAVING COUNT(DISTINCT Room) > 1;
逻辑说明
- 用
GROUP BY Name将所有记录按姓名分组,同一名面试者的所有面试记录会被归到同一分组中 COUNT(DISTINCT Room)会统计每个分组内不重复的房间数量,自动忽略同一个人在同一房间多次面试的重复统计HAVING子句用于过滤分组后的聚合结果,只保留不同房间数大于1的分组,也就是在至少2个不同房间参加过面试的人员
样例验证
对你提供的测试数据执行上述SQL,返回结果只有Sam,符合你的需求:
- Jerry仅在D房间面试,不同房间数为1,不返回
- Sam先后在A、D两个房间面试,不同房间数为2,符合要求
- Sarah仅在A房间面试,不同房间数为1,不返回
- Will仅在B房间面试,不同房间数为1,不返回
原写法问题说明
你原来的代码中DISTINCT用法错误,DISTINCT是用于对最终查询的整行结果去重的关键字,不能直接搭配比较运算符做判断。统计不同值的数量需要和聚合函数COUNT结合使用,且分组后的聚合结果过滤需要用HAVING子句,不能直接写在FROM之后。
内容的提问来源于stack exchange,提问作者user17498119
相关产品推荐
相关产品推荐

