sql-获取当前薪水第二多的员工的emp_no以及其对应的薪水salary
2021/6/10 2:21:26
本文主要是介绍sql-获取当前薪水第二多的员工的emp_no以及其对应的薪水salary,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
牛客上的sql题目 记录下
描述
有一个员工表employees简况如下: 有一个薪水表salaries简况如下: 请你查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,以上例子输出为: (温馨提示:sqlite通过的代码不一定能通过mysql,因为SQL语法规定,使用聚合函数时,select子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非group by的列名,sqlite的结果和mysql 可能不一样)示例1
输入:drop table if exists `employees` ; drop table if exists `salaries` ; CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`)); CREATE TABLE `salaries` ( `emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL, PRIMARY KEY (`emp_no`,`from_date`)); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'); INSERT INTO salaries VALUES(10001,88958,'2002-06-22','9999-01-01'); INSERT INTO salaries VALUES(10002,72527,'2001-08-02','9999-01-01'); INSERT INTO salaries VALUES(10003,43311,'2001-12-01','9999-01-01'); INSERT INTO salaries VALUES(10004,74057,'2001-11-27','9999-01-01');输出:
10004|74057|Koblick|Chirstian
思路:
第一种方法:很显然,求第二名就是除去第一名后的第一名,通过子查询查出第一名并将其排除即可
主要理解第二种方法:使用多表连接,将第一名排除,并选中第二名(不限于第二名)
1.多表连接进行统计比自身大的有多少个
2.由上表可显然得出,名次就是大于他自身的数量,加上having进行筛选
3.完整代码
SELECT e.emp_no, salary, last_name, first_name FROM employees e JOIN salaries s ON e.emp_no = s.emp_no WHERE s.salary =( SELECT s1.salary FROM salaries s1 JOIN salaries s2 ON s1.salary <= s2.salary GROUP BY s1.salary HAVING count( DISTINCT s2.salary ) = 2 )
这篇关于sql-获取当前薪水第二多的员工的emp_no以及其对应的薪水salary的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南