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

681 阅读1分钟

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

Test 1

有一个薪水表 salaries 简况如下:

image.png 请你获取薪水第二多的员工的 emp_no 以及其对应的薪水 salaryimage.png


考察知识点

INNER JOINORDER BYFROM 中嵌套查询结果。


解题思路

:one: 先获取第二高薪水

SELECT DISTINCT(s2.salary)
                    FROM salaries AS s2
                    ORDER BY s2.salary DESC
                    LIMIT 1, 1

:two: 再查找薪资与第二高薪水相等的员工相关信息。

SELECT emp_no, s1.salary
FROM salaries AS s1
WHERE s1.salary = (SELECT DISTINCT(s2.salary)
                    FROM salaries AS s2
                    ORDER BY s2.salary DESC
                    LIMIT 1, 1)

Test 2

有一个员工表 employees 简况如下:

image.png 有一个薪水表 salaries 简况如下:

image.png 请你查找薪水排名第二多的员工编号 emp_no、薪水 salarylast_name 以及 first_name ,不能使用 order by 完成,以上例子输出为: (温馨提示: sqlite 通过的代码不一定能通过 mysql ,因为 SQL 语法规定,使用聚合函数时,select 子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非 group by 的列名,sqlite 的结果和 mysql 可能不一样) image.png


考察知识点

INNER JOINMAX,子查询。


解题思路

先利用 MAX() 函数找出 salaries 中当前薪水最高者,再找出小于最高薪水的 MAX(salary) ,即为第二高薪水。然后在内连接而成的表中根据题中条件筛选即可。

SELECT e.emp_no, salary, last_name, first_name
FROM employees AS e INNER JOIN salaries AS s
ON e.emp_no = s.emp_no
AND s.salary = (SELECT max(salary)
	             FROM salaries
	             WHERE salary < (SELECT MAX(salary)
	                            FROM salaries))

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

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