【面试必刷】Mysql编程题:第七期

127 阅读2分钟

「这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战」。

Test 1

有一个部门表 departments 简况如下: 有一个,部门员工关系表 dept_emp 简况如下: 有一个薪水表 salaries 简况如下: 请你统计各个部门的工资记录数,给出部门编码 dept_no 、部门名称 dept_name 以及部门在 salaries 表里面有多少条记录 sum ,按照 dept_no 升序排序,以上例子输出如下:


考察知识点

内联结ORDER BYGROUP BY


解题思路

根据题目的描述,可以先将 dept_empdepartments 两个表连接起来,再与 salaries 表连接,然后通过 dept_no 进行分组,使用 COUNT() 统计 salary 的数目 sum ,最后再通过 dept_no 进行排序即可。

SELECT d.dept_no, dept_name, COUNT(salary) AS sum
FROM dept_emp AS d INNER JOIN departments AS dp
ON d.dept_no = dp.dept_no
INNER JOIN salaries AS s
ON d.emp_no = s.emp_no
GROUP BY dept_no
ORDER BY dept_no

Test 2

有一个薪水表 salaries 简况如下: 对所有员工的薪水按照 salary 降序进行 1-N 的排名,要求相同 salary 并列且按照 emp_no 升序排列:


考察知识点

窗口函数 DENSE_RANK()ORDER BY


解题思路

根据题目的要求,可以使用窗口函数进行排序。

SELECT emp_no, salary, DENSE_RANK() OVER(ORDER BY salary DESC)
FROM salaries

三种排序的窗口函数:

  • RANK() 在排序时,若有相同位次,会跳过这些位次进行排序。 例如,有3条数据排在第1位时,排序为:1,1,1,4······
  • DENSE_RANK() 在计排序时,若存在相同位次,不会跳过之后的位次。 例如,有3条数据排在第1位时,排序为:1,1,1,2······
  • ROW_NUMBER() 这个函数赋予唯一的连续位次。 例如,有3条数据排在第1位时,排序为:1,2,3,4······

题目来源:牛客网-SQL数据库实战题

每日打卡,❤ 点个赞再走吧!!!❤
在这里插入图片描述 后续会继续分享 Mysql 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。