编写SQL查询获取同时获得Gold和Silver奖项的员工姓名
筛选同时获得Gold和Silver奖项的员工姓名
没问题,我来帮你搞定这个SQL查询需求。首先明确目标:从给定的员工表中找出**同时拥有Gold(金牌)和Silver(银牌)**奖项的员工姓名。
员工表数据:
Employee Name | Awards --------------|------- A | Gold B | Silver C | Diamond D | Silver A | Silver B | Diamond
下面是几种可靠的实现方案:
方案一:GROUP BY + HAVING(推荐)
这是最简洁高效的方法,通过分组和条件过滤实现:
SELECT `Employee Name` FROM employee_table WHERE Awards IN ('Gold', 'Silver') GROUP BY `Employee Name` HAVING COUNT(DISTINCT Awards) = 2;
逻辑解释:
WHERE子句先过滤掉无关奖项(比如Diamond),只保留Gold和Silver的记录;GROUP BYEmployee Name``按员工姓名分组;HAVING COUNT(DISTINCT Awards) = 2确保该员工的分组里同时包含两种不同奖项,也就是同时拿到了Gold和Silver。
方案二:自连接
如果更喜欢用连接思路实现,可以试试自连接:
SELECT DISTINCT e1.`Employee Name` FROM employee_table e1 JOIN employee_table e2 ON e1.`Employee Name` = e2.`Employee Name` WHERE e1.Awards = 'Gold' AND e2.Awards = 'Silver';
逻辑解释:
把员工表和自身做连接,分别匹配员工拿到Gold和Silver的记录,最后通过DISTINCT去重,得到同时满足两个条件的员工。
方案三:子查询(直观易懂)
用子查询分别获取拿Gold和Silver的员工列表,再取交集:
SELECT `Employee Name` FROM employee_table WHERE Awards = 'Gold' AND `Employee Name` IN ( SELECT `Employee Name` FROM employee_table WHERE Awards = 'Silver' );
逻辑解释:
先通过子查询找出所有拿到Silver的员工,再在外层查询中筛选出既拿到Gold、又在这个子查询结果里的员工。
内容的提问来源于stack exchange,提问作者amit tiwari
相关产品推荐
相关产品推荐

