题解 | #获取有奖金的员工相关信息。#

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

https://www.nowcoder.com/practice/5cdbf1dcbe8d4c689020b6b2743820bf

我们需要获取有奖金的员工相关信息。要做的事情如下:

1. 确定总体问题

这道题目要求我们计算并返回有奖金的员工的详细信息,包括员工编号、名字、姓氏、奖金类型、当前薪水以及奖金金额。奖金金额根据奖金类型计算,具体为:类型1的奖金为薪水的10%,类型2的奖金为薪水的20%,其他类型为薪水的30%。

我们需要从员工表、奖金表和薪水表中提取数据,通过员工编号进行连接,并计算奖金金额。

2. 分析关键问题

  • 连接表:将employeesemp_bonussalaries表连接起来,以便获取每个员工的奖金和薪水信息。
  • 筛选当前薪水:通过to_date = '9999-01-01'条件筛选出当前薪水记录。
  • 计算奖金金额:根据奖金类型计算奖金金额。
  • 排序输出:按员工编号升序排列输出结果。

3. 解决每个关键问题的代码及讲解

步骤1:连接表

我们使用INNER JOINemployeesemp_bonussalaries表连接起来:

from
    employees ey
    join emp_bonus eb on eb.emp_no = ey.emp_no
    join salaries s on ey.emp_no = s.emp_no
  • join emp_bonus eb on eb.emp_no = ey.emp_no:通过员工编号连接员工表和奖金表。
  • join salaries s on ey.emp_no = s.emp_no:通过员工编号连接员工表和薪水表。
步骤2:筛选当前薪水

我们通过to_date = '9999-01-01'条件筛选出当前薪水记录:

where
    to_date = '9999-01-01'
步骤3:计算奖金金额

我们使用CASE语句根据奖金类型计算奖金金额,类型1的奖金为薪水的10%,类型2的奖金为薪水的20%,其他类型为薪水的30%,并使用ROUND函数保留一位小数:

round(
    case
        when eb.btype = 1 then s.salary * 0.1
        when eb.btype = 2 then s.salary * 0.2
        else s.salary * 0.3
    end,
    1
) as bonus
步骤4:排序输出

我们使用ORDER BY按员工编号升序排列输出结果:

order by
    emp_no asc

完整代码

select
    ey.emp_no,
    ey.first_name,
    ey.last_name,
    eb.btype,
    s.salary,
    round(
        case
            when eb.btype = 1 then s.salary * 0.1
            when eb.btype = 2 then s.salary * 0.2
            else s.salary * 0.3
        end,
        1
    ) as bonus
from
    employees ey
    join emp_bonus eb on eb.emp_no = ey.emp_no
    join salaries s on ey.emp_no = s.emp_no
where
    to_date = '9999-01-01'
order by
    emp_no asc;
全部评论

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
投递美团等公司10个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
05-28 12:15
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 18:02
好不容易拿到了字节Offer,鼠鼠做后端的,但家里人觉得可能被裁员不稳定,让鼠鼠去投国企,现在好纠结到底该咋选
文档传偷助手:该投就投吧,不过建议别放弃offer 拿到手里的才是最好的
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务