「这是我参与11月更文挑战的第30天,活动详情查看:2021最后一次更文挑战」。
Test 1
有一个部门表 departments 简况如下:
有一个,部门员工关系表
dept_emp 简况如下:
有一个薪水表
salaries 简况如下:
请你统计各个部门的工资记录数,给出部门编码
dept_no 、部门名称 dept_name 以及部门在 salaries 表里面有多少条记录 sum ,按照 dept_no 升序排序,以上例子输出如下:
考察知识点
内联结、ORDER BY,GROUP BY。
解题思路
根据题目的描述,可以先将 dept_emp 和 departments 两个表连接起来,再与 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 方面的文章,如果感兴趣的话可以点个关注不迷路哦~。