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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程