文章目录
- 前言
- 一 牛客介绍
- 1.1 首页
- 1.2 各大厂真题
- 1.3 面试题库
- 1.4 题目灵活
- 二 选择题目练习
- 2.1 编辑界面介绍
- 2.2 题目要求
- 三 题目知识点汇总
- 3.1 题目解读
- 3.1.1 请你查找在职员工自入职以来的薪水涨幅情况,
- 3.1.2 给出在职员工编号emp_no以及其对应的薪水涨幅growth,
- 3.1.3并按照growth进行升序
- 四、解题步骤
- 4.1 提交答案
前言
在刷题之前我想首先介绍一下牛客,以便没有使用过的小伙伴能够快速入手,牛客网是国内最大的算法、面试、招聘网站,涵盖了多种大厂面试真题以及题解,里面大佬云集,各种题目的解决方案层出不穷,绝对能让你大开眼界,而且牛客是你在人生中不同的阶段都能对你有所帮助的编程软件(完全免费),如果感兴趣可以访问注册一下
访问链接:牛客-国内最大的刷题网站
一 牛客介绍
1.1 首页
1.2 各大厂真题
1.3 面试题库
1.4 题目灵活
二 选择题目练习
2.1 编辑界面介绍
2.2 题目要求
三 题目知识点汇总
这题主要的知识点就是对join的应用,考察对不同连接的理解。
左,右,内,外全连接:
- 左连接:表1 left join 表2 on 表1.字段=表2.字段 (以表1为准,表2进行匹配)
- 右连接:表1 right join 表2 on 表1.字段=表2.字段 (以表2为准,表1进行匹配)
- 全连接:表1 union all 表2 (表1 和表2的列数必须一样多,union 去除重复项,union all 不剔除重复项)
- 内连接:表1 inner join 表2(取表1和表2相交部分)
- 外连接:表1 full outer join 表2 (取表1和表2不相交的部分)
3.1 题目解读
3.1.1 请你查找在职员工自入职以来的薪水涨幅情况,
a、在职员工:to_date=‘9999-01-01’
b、薪水涨幅:不能用最大的薪资-最小的薪资,因为存在降薪情况,应该用最近日期的薪资-入职日期的薪资。
3.1.2 给出在职员工编号emp_no以及其对应的薪水涨幅growth,
表头
emp_no:
growth:当前薪资(to_date=’9999-01-01’的薪资)-入职薪资(from_date=hire_date的薪资)
3.1.3并按照growth进行升序
ORDER BY growth
题目中隐含的坑:即为涨幅的定义,我最开始的解法是直接拿最高薪资-最低薪资,这样做,当然是错的啦~
四、解题步骤
分两步走即可:首先根据已有的信息创建两张子表,分别是当前薪资表和入职薪资表;接着关联两张子表(这里注意要使用内连接哦~),用当前薪资表的薪资减去入职薪资表的薪资即为薪资增幅。
STEP1:创建两张薪资子表
SELECT emp_no,salary FROM salaries WHERE to_date='9999-01-01' #当前薪资表 t1
SELECT salaries.emp_no,salary FROM salaries JOIN employees WHERE hire_date=from_date #入职薪资表 t2
STEP2(完整代码):内关联两张表并求薪资差,并按照growth升序
SELECT emp_no,t1.salary-t2.salary AS growthFROM (SELECT emp_no,salary FROM salaries WHERE to_date='9999-01-01')t1 #当前薪资表INNER JOIN (SELECT salaries.emp_no,salary FROM salaries JOIN employees WHERE hire_date=from_date)t2 #入职薪资表USING(emp_no) ORDER BY growth;
4.1 提交答案
牛客访问链接:牛客-国内最大的刷题网站
本篇文章结束了哦,看到这里那么你对牛客有什么了解呢欢迎评论~