题解 | 获取有奖金的员工相关信息。
获取有奖金的员工相关信息。
https://www.nowcoder.com/practice/5cdbf1dcbe8d4c689020b6b2743820bf
SELECT
e.emp_no,
e.first_name,
e.last_name,
em.btype, -- 统一引用 em 表的 btype(原表关联是 emp_bonus AS em)
s.salary, -- 明确引用薪资表 s 的 salary 字段
ROUND(
CASE
WHEN em.btype = 1 THEN s.salary * 0.1 -- btype=1:奖金=薪资×0.1
WHEN em.btype = 2 THEN s.salary * 0.2 -- btype=2:奖金=薪资×0.2
WHEN em.btype NOT IN (1, 2) THEN s.salary * 0.3 -- 其他 btype:奖金=薪资×0.3
END, -- 关键:CASE WHEN 必须用 END 闭合
1 -- 保留 1 位小数(ROUND 第二个参数是小数位数)
) AS bonus
FROM
employees e
JOIN emp_bonus em ON em.emp_no = e.emp_no -- 员工与奖金表关联
JOIN salaries s ON s.emp_no = e.emp_no -- 员工与薪资表关联
AND s.to_date='9999-01-01'
ORDER BY e.emp_no; -- 按员工编号排序
先算出奖金
再关联表
补全 CASE WHEN 的 END(必须闭合)
round在 CASE WHEN的外面
AND s.to_date='9999-01-01'
必须是在职员工