牛客网数据库SQL实战解析(11-20题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0
牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010666669/article/details/104763370
牛客网数据库SQL实战解析(11-20题): https://blog.csdn.net/u010666669/article/details/104863298
牛客网数据库SQL实战解析(21-30题): https://blog.csdn.net/u010666669/article/details/104871373
牛客网数据库SQL实战解析(31-40题): https://blog.csdn.net/u010666669/article/details/104977904
牛客网数据库SQL实战解析(41-50题): https://blog.csdn.net/u010666669/article/details/104979427
牛客网数据库SQL实战解析(51-61题): https://blog.csdn.net/u010666669/article/details/104980372
第11题 获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'。
select de.emp_no,
dm.emp_no as manager_no
from dept_emp de
inner join dept_manager dm
on de.dept_no=dm.dept_no
where de.to_date='9999-01-01'
and dm.to_date='9999-01-01'
and de.emp_no <> dm.emp_no
;
解析:这里用左连接和内连接都可以
第12题 获取所有部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary
select de.dept_no,
de.emp_no,
max(s.salary)
from dept_emp de
left join salaries s
on de.emp_no=s.emp_no
where de.to_date='9999-01-01' and s.to_date='9999-01-01'
group by de.dept_no
;
解析:group by 对部门进行分组,max()函数取每组里面的最大值
第13题:从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t
select title, count(1) as t
from titles
group by title
having t >= 2
;
解析:having t >=2 ,对count后的数据进行过滤
第14题 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t。注意对于重复的emp_no进行忽略。
select title,
count(distinct emp_no) as t
from titles
group by title
having t >= 2
解析:对emp_no 去重,直接distinct就可以了
第15题 查找employees表所有emp_no为奇数,且last_name不为Mary的员工信息,并按照hire_date逆序排列
select *
from employees
where emp_no%2=1
and last_name <> 'Mary'
order by hire_date desc
;
解析:这道题很简单,奇数就是模2余1,注意看下数据格式,如果不是int类型,需要先用cast转数据类型
第16题 统计出当前各个title类型对应的员工当前(to_date='9999-01-01')薪水对应的平均工资。结果给出title以及平均工资avg。
select t.title,
avg(s.salary) as `avg`
from salaries s
left join titles t
on s.emp_no=t.emp_no
where s.to_date='9999-01-01' and t.to_date='9999-01-01'
group by t.title
;
解析:这道题主要是考察对avg()函数的使用, 求平均数。
第17题 获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salary
select emp_no, salary
from salaries
order by salary desc
limit 1,1
;
解析:薪水第二多的员工,用 limit1,1 表示
第18题 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
SELECT e.emp_no
, s.salary
, e.last_name
, e.first_name
FROM employees e
LEFT JOIN salaries s
ON e.emp_no=s.emp_no
WHERE s.salary = (
SELECT MAX(salary)
FROM salaries
WHERE to_date='9999-01-01'
AND salary < (SELECT MAX(salary) FROM salaries)
)
;
解析:找到薪水排名第一的员工,然后排名仅次于第一的员工就是排名第二的员工,两个子查询搞定。
第19题 查找所有员工的last_name和first_name以及对应的dept_name,也包括暂时没有分配部门的员工
SELECT a.last_name
, a.first_name
, dp.dept_name
FROM (
SELECT e.last_name
, e.first_name
, de.dept_no
FROM employees e
LEFT JOIN dept_emp de
ON e.emp_no=de.emp_no
) a
LEFT JOIN departments dp
ON dp.dept_no=a.dept_no
;
解析:这道题也很简单,搞清楚表结构后,两次 left join 即可求出。
第20题 查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth
SELECT MAX(salary) - MIN(salary) AS growth
FROM salaries
WHERE emp_no='10001'
;
其他解法二:
SELECT
(SELECT salary FROM salaries WHERE emp_no = '10001' ORDER BY to_date DESC LIMIT 1 ) -
( SELECT salary FROM salaries WHERE emp_no = '10001' ORDER BY to_date ASC LIMIT 1 ) AS growth;
FROM salaries;
解析:这道题有两种理解:一是涨幅值为最大薪资值减最小薪资值,二是现在的工资减入职时的工资,考虑到可能存在降薪,题解二的理解是更符合实际的,但是sql不通过。。这里提供这种思考方式,万一面试问到了呢。
牛客网数据库SQL实战解析(11-20题)的更多相关文章
- 牛客网数据库SQL实战解析(51-61题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(41-50题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(31-40题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(21-30题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战解析(1-10题)
牛客网SQL刷题地址: https://www.nowcoder.com/ta/sql?page=0 牛客网数据库SQL实战解析(01-10题): https://blog.csdn.net/u010 ...
- 牛客网数据库SQL实战1-查找最晚入职员工的所有信息
题目描述 查找最晚入职员工的所有信息CREATE TABLE `employees` (`emp_no` int(11) NOT NULL,`birth_date` date NOT NULL,`fi ...
- 牛客网数据库SQL实战(21-25)
21.查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序CREATE TABLE `employees` (`emp_no` i ...
- 牛客网数据库SQL实战(16-20)
16.统计出当前各个title类型对应的员工当前薪水对应的平均工资.结果给出title以及平均工资avg.CREATE TABLE `salaries` (`emp_no` int(11) NOT N ...
- 牛客网数据库SQL实战(11-15)
11.获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'.结果第一列给出当前员工的emp_no,第二列给出其manager ...
随机推荐
- 06_Python基础课程
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料! b站在线视频 Pyth ...
- ES6标准入门 2/26
第一章 ECMAScript6 简介 1.首先经典开头,ECMAScript跟JavaScript的关系,前者是后者的规格,后者是前者的一种实现.在日常场合中,这两个词是可以互换的. 2.ES6可以泛 ...
- Python创建字符串
Python创建字符串: 一般情况下可以使用 ' 或 " 创建字符串 或 使用引用字符串变量 或 字符串表达式. # 字符串的创建 # 使用 ' 或 “ 进行创建 strs = 'ABCDE ...
- numpy第三方库
# 导入numpy 并赋予别名 np import numpy as np # 创建数组的常用的几种方式(列表,元组,range,arange,linspace(创建的是等差数组),zeros(全为 ...
- PHP imagecolorclosesthwb - 取得与指定的颜色最接近的色度的黑白色的索引
imagecolorclosesthwb — 取得与指定的颜色最接近的色度的黑白色的索引.高佣联盟 www.cgewang.com 语法 int imagecolorclosesthwb (s res ...
- OKHttp 官方文档【二】
OkHttp 是这几年比较流行的 Http 客户端实现方案,其支持HTTP/2.支持同一Host 连接池复用.支持Http缓存.支持自动重定向 等等,有太多的优点. 一直想找时间了解一下 OkHttp ...
- Maven执行Reimport命令报错:See logs for details
Idea版本:2018.1.3 maven版本:3.6.2 Idea配置了本地下载的maven之后,不管是直接执行maven的Reimport命令,还是使用idea的Reimport按钮,都会报这个错 ...
- jmeter如何设置全局变量
场景:性能测试或者接口测试,如果想跨线程引用(案例:A线程组里面的一个输出,是B线程组里面的一个输入,这个时候如果要引用),这个时候你就必须要设置全局变量;全链路压测也需要分不同场景,通常情况,一个场 ...
- AsyncTask被废弃了,换Coroutine吧
本文主要是学习笔记,有版权问题还请告知删文 鸣谢:guolin@第一行代码(第三版) 你是否也在最近的代码中看见了 AsyncTask 被一条横杠划掉了 这表明--他要被Google放弃了 Googl ...
- Hexo小技巧(包括如何插入本地图片)
我在研究如何在Hexo中引用本地图片时,看到官方文档对此问题已给出了解决方法,并亲测有效.当然,我并不满足于仅仅知道这一个技巧.在大致阅读过官方文档后,我总结了之前我个人并不知道的几个关于Hexo写博 ...