按照奖金类型和工资发奖金

获取有奖金的员工相关信息。

http://www.nowcoder.com/questionTerminal/5cdbf1dcbe8d4c689020b6b2743820bf

思路1:题目可以发现奖金类型与奖金比例的关系是btype*0.1,所以可以直接计算。(这里要用*0.1,不能用/10,否则会报错)
select e.emp_no
        ,e.first_name
        ,e.last_name
        ,b.btype
        ,s.salary
        ,(s.salary*b.btype*0.1) as bonus
from employees e
join salaries s on e.emp_no=s.emp_no
join emp_bonus b on e.emp_no=b.emp_no
where s.to_date='9999-01-01';

思路2:用case进行分类。
select e.emp_no
        ,e.first_name
        ,e.last_name
        ,b.btype
        ,s.salary
        ,case when b.btype=1 then s.salary*0.1
              when b.btype=2 then s.salary*0.2
              else s.salary*0.3 
              end as bonus
from employees e
join salaries s on e.emp_no=s.emp_no
join emp_bonus b on e.emp_no=b.emp_no
where s.to_date='9999-01-01';
思路3:先把每个奖金类型的分别按输出格式查出来,最后用union拼接。
全部评论
思路一是不对的,如果全表btype有4、5、6那就算出来是错的。当然这里巧合刚好存在这几种类型。
8 回复 分享
发布于 2021-05-23 10:54
为什么我用 left join连表 不行,用join连表就行了
点赞 回复 分享
发布于 2022-01-03 23:16
小红书
校招火热招聘中
官网直投
这里用除法也是可以的,不是一定要乘法才行,最后根据题意限制一下小数位数
点赞 回复 分享
发布于 2022-02-18 17:32

相关推荐

29 收藏 评论
分享
牛客网
牛客企业服务