文章目录

  • 前言
  • 一 牛客介绍
    • 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 提交答案

牛客访问链接:牛客-国内最大的刷题网站

本篇文章结束了哦,看到这里那么你对牛客有什么了解呢欢迎评论~