牛客题霸-SQL篇——10~20题(2)

简介: + SQ18:获取当前薪水第二多的员工的emp_no以及其对应的薪水salary描述有一个员工表employees简况如下:

牛客题霸-SQL篇——10~20题(1)https://developer.aliyun.com/article/1415692

+ SQ18:获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

描述

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

20210608142253843.png

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

请你查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,以上例子输出为:


(温馨提示:sqlite通过的代码不一定能通过mysql,因为SQL语法规定,使用聚合函数时,select子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非group by的列名,sqlite的结果和mysql 可能不一样)

20210608142306410.png

示例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

代码:

select salaries.emp_no, max(salary) salary ,last_name,first_name
from  employees
left join salaries
on employees.emp_no = salaries.emp_no
where salary not in(
    select max(e.salary)
    from salaries e
)


20210608144218920.png

+ SQ19 查找所有员工的last_name和first_name以及对应的dept_name

描述

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

有一个部门表departments表简况如下:

20210608144852733.png

有一个,部门员工关系表dept_emp简况如下:

请你查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工,以上例子输出如下:

代码:

select e.last_name,e.first_name,d.dept_name
from employees e
left join dept_emp de
on e.emp_no = de.emp_no
left join departments d
on de.dept_no = d.dept_no


20210608145205421.png 

目录
相关文章
|
3月前
|
SQL 关系型数据库 MySQL
牛客题霸-SQL篇——10~20题(1)
+ SQ11:获取所有员工当前的manager 描述 有一个员工表dept_emp简况如下:
50 0
|
3月前
|
SQL
牛客题霸-SQL篇——1~10题(3)
+ SQ10:获取所有非manager的员工emp_no 描述 有一个员工表employees简况如下:
45 0
|
3月前
|
SQL
牛客题霸-SQL篇——1~10题(2)
+ SQ5:查找所有员工的last_name和first_name以及对应部门编号dept_no 描述 有一个员工表,employees简况如下:
42 0
|
3月前
|
SQL
牛客题霸-SQL篇——1~10题(1)
+ SQ1:查找最晚入职员工的所有信息 描述 有一个员工employees表简况如下:
57 0
|
SQL
牛客题霸刷题-SQL必知必会50道
SQL每个人都要用,但是用来衡量产出的并不是SQL本身,你需要用这个工具,去创造其它的价值。
335 31
牛客题霸刷题-SQL必知必会50道
|
SQL
【SQL】牛客题霸SQL入门篇1(基础查询、条件查询、高级查询)
【SQL】牛客题霸SQL入门篇1(基础查询、条件查询、高级查询)
164 0
|
27天前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
45 13
|
24天前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
22天前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
34 6
|
6天前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
35 0