2021.08.09学习总结

总览

  • 8:45~8:55 学习打卡
  • 9:00~12:00 MySQL写题
    • 对所有员工的薪水按照salary降序进行1-N的排名
    • 获取员工其当前的薪水比其manager当前薪水还高的相关信息
  • 14:30~16:00 MySQL写题
    • 获取每个部门中当前员工薪水最高的相关信息
  • 16:00~19:00 写JavaWeb项目
  • END

8:45~8:55 学习打卡

早!

9:00~12:00 MySQL写题

上午在牛客上面写了很多题,有些题没啥东西,就不拿出来了,这里只放一些比较有意思的题。

对所有员工的薪水按照salary降序进行1-N的排名

题目链接
这题考察排序函数的使用,但是使用太简单了,这题其实不用函数也能写。
首先我们把工资表里面重复的工资去重:

SELECT DISTINCT(salary) AS salary FROM salaries

然后拿去重的工资表连接去重的工资表:

(SELECT DISTINCT(salary) AS salary FROM salaries) AS a
INNER JOIN (SELECT DISTINCT(salary) AS salary FROM salaries) AS b
ON a.salary<=b.salary

因为 ON a.salary<=b.salary,最后的结果是,salary数量排第1的在a.salary这列出现了1次,
同理salary数量排第 N 的在a.salary这列出现了 N 次,因为连接做的是笛卡尔乘积,然后又需要满足ON a.salary<=b.salary
然后我们就可以根据工资在a.salary列出现的次数,得到它排第几。
完整SQL代码:

SELECT salaries.emp_no,salaries.salary,x.t_rank
FROM salaries
INNER JOIN(
    SELECT a.salary AS salary,COUNT(a.salary) AS t_rank
    FROM (SELECT DISTINCT(salary) AS salary FROM salaries) AS a
    INNER JOIN (SELECT DISTINCT(salary) AS salary FROM salaries) AS b
    ON a.salary<=b.salary
    GROUP BY a.salary
        ) AS x
ON salaries.salary=x.salary
ORDER BY t_rank,salaries.emp_no

获取员工其当前的薪水比其manager当前薪水还高的相关信息

题目链接
通过关系表弄出员工工资表和经理工资表,然后连接这两张表再加上约束条件就行了:

SELECT emp.emp_no,man.emp_no,emp.salary,man.salary
FROM (dept_emp INNER JOIN salaries ON dept_emp.emp_no=salaries.emp_no) AS emp
INNER JOIN (dept_manager INNER JOIN salaries ON dept_manager.emp_no=salaries.emp_no) AS man
ON emp.dept_no=man.dept_no
WHERE emp.emp_no!=man.emp_no AND emp.salary>man.salary

14:30~16:00 MySQL写题

获取每个部门中当前员工薪水最高的相关信息

题目链接
先把每个员工的工资信息放入员工表,然后再按照部门分组,选出每个部门工资最高的就行了,最后排一下序:

SELECT dept_emp.dept_no,dept_emp.emp_no,salaries.salary
FROM dept_emp
INNER JOIN salaries
ON dept_emp.emp_no=salaries.emp_no
GROUP BY dept_emp.dept_no
HAVING salaries.salary=MAX(salaries.salary)
ORDER BY dept_emp.dept_no

16:00~19:00 写JavaWeb项目

还是写用户个人信息界面,用户之间的关注等。

END

你可能感兴趣的:(MySQL,mysql)