如何修改SQL代码新增列判断员工是否满足奖励条件(订单数>60)
解决方案
方式一:基于现有视图修改查询
原有代码通过HAVING仅筛选出订单数超60的员工,且未生成标记列。修改后的查询会返回所有1997年有订单的员工,并新增奖励标记列:
Select first_name, last_name, count(employee_id) as orders_count, CASE WHEN count(employee_id) > 60 THEN '应得奖励' ELSE '不应得奖励' END as 奖励标记 From Award_1997 Where order_date >= '1997-01-01' and order_date <='1997-12-31' Group by first_name, last_name
方式二:直接关联表查询(更高效)
无需提前创建视图,直接关联员工表和订单表,还能覆盖1997年无订单的员工:
Select e.first_name, e.last_name, COUNT(o.order_id) as orders_count, -- 用订单主键统计更准确 CASE WHEN COUNT(o.order_id) > 60 THEN '应得奖励' ELSE '不应得奖励' END as 奖励标记 From employees e Left Join orders o on e.employee_id = o.employee_id and o.order_date between '1997-01-01' and '1997-12-31' Group by e.first_name, e.last_name
关键修改说明
- 移除
HAVING子句:确保所有符合分组条件的员工都被返回,而非仅筛选订单数超60的记录 - 新增
CASE WHEN表达式:根据订单数动态生成奖励标记列,满足需求中的判断规则 - 可选优化:使用
Left Join可包含1997年无订单的员工(此时订单数为0,标记为“不应得奖励”);若只需统计有订单的员工,替换为Inner Join即可
内容的提问来源于stack exchange,提问作者Lamer
相关产品推荐
相关产品推荐

