老杜MySql——34道作业题
老杜MySql链接:https://www.bilibili.com/video/BV1Vy4y1z7EX?p=132
本次随笔主要来源于老杜MySql讲解视频后面的作业题,加上个人的一些理解,以及整理;
部分较为简单就不进行收录了;
基本表的相关信息,以及部分实例数据:
emp



1.取得每个部门最高薪水的人员名称
(1)首先找到每个部门最高的薪水
select deptno,max(SAL) maxsal
from emp
group by deptno;
(2)将上述查询结果作为一个新表t,进行连接查询找出相关名字
select ename
from emp e
join t
on e.sal=t.sal and e.deptno=t.deptno;
最终结果为:
select ename
from emp e
join (select DEPTNO,max(SAL) maxsal from EMP group by DEPTNO )t
on e.sal=t.sal and e.deptno=t.deptno;
2.哪些人的薪水在部门的平均的水平之上
(1)先找出每个部门的工资平均水平
select deptno,avg(asl) avgsal
from emp
group by deptno;
(2)与1同理
select ename
from emp e
join (select deptno,avg(SAL) avgsal from emp group by deptno )t
on e.sal>t.avgsal and e.deptno=t.deptno;
需要注意点:连接条件中的t.avgsal,即采用了重命名的方式不可轻易修改,如果直接使用函数则会出错
3.取得部门所有人平均的薪资等级
(1)查出每个人薪水等级
select empno,grade
from emp e,aslgrade s
where e.sal between s.loasl and s.hisal;
(2)将查出的结果再次求平均
selece avg(t.grade) avggrade
from (select empno,grade
from emp e,aslgrade s
where e.sal between s.loasl and s.hisal) t
3.1取得部门所有人平均薪水的等级
(1)取得所有人的平均薪水
select deptno,avg(asl) avgsal
from emp;
(2)根据薪水确定等级
select grade
from (select deptno,avg(asl) avgsal from emp) t,salgrade s
where avg between s.logal and hisal;
4.不准用组函数(max),取得最高薪水(两种方法)
方法1:排序
select sal
from emp
order by sal desc
limit 1;
方法2:表连接
思路:首先找出出了最高薪水以外其他的薪水()
select distinct e1.sal
from
emp e1
join
emp e2
on e1.sal<e2.sal;
(2)将上述结果排除
select sal
from emp
where sal not in(
select distinct e1.sal
from
emp e1
join
emp e2
on e1.sal<e2.sal;
)
5.取得平均薪资最高的部门的部门编号(至少给出两种解决方案)
(1)求每个部门的平均薪资
select e.deptno,avg(sal) avgsal
from emp e
group by e.deptno;
(2)
select deptno,max(avgsal)
from (
select e.deptno,avg(sal) avgsal
from emp e
group by e.deptno;
)
其他方法为取最大值的部分使用order by desc limit 1;
官方做法:
select e.deptno,avg(sal) avgsal
from emp e
group by e.deptno
order by avgsal
limit 1;
其二:

6.取得平均薪资最高的部门的部门名称
同上
7.求平均薪水等级最低的部门名称
在此基础上加上连接
8.取得比普通员工(员工代码没有在mgr字段上出现的)的最高薪水还要高的领导人姓名
(0)出现在mgr字段上的代码
select distinct mgr
from emp;
(1)求出普通员工的最高薪资水平
select max(sal)
from emo e
where empno not in(select distinct mgr
from emp where mgr is not null);
关键点在于需要派除null 的存在,有null存在则所有的值变为null
(2)最终求解
select sal
from emp
where sal>(
select
max(sal)
from
emo e
where
empno not in(select distinct mgr from emp where mgr is not null)
);
9.列出每个部门工作的员工数量,平均工资和平均服务期限
select d.deptno,count(e.ename),ifnull(avg(e.sal),0),avg(timestampdiff(YEAR,hiredate,now()))
from
emp e
right join
dept d
on
e.deptno=d.deptno
group by
d.deptno;
关键点 :计算日期之间差值的函数timestampdiff(YEAR,hiredate,now())
YEAR:间隔类型 hiredate:开始日期 now():结束日期
间隔类型的其他值:second 秒 minute 分钟 hour 小时 day天
week 星期 month 月 quarter季度
老杜MySql——34道作业题的更多相关文章
- 老杜告诉你java小白到大神是怎么炼成的(转载)
老杜告诉你java小白到大神是怎么炼成的 1. 学习前的准备 一个好的学习方法(应该怎么学习更高效): 一个合格的程序员应该具备两个能力 有一个很好的指法速度(敲代码快) 有一个很好的编程思想(编程思 ...
- 动力节点 mysql 郭鑫 34道经典的面试题三
1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...
- 动力节点 mysql 郭鑫 34道经典的面试题二
13.有3个表S(学生表),C(课程表),SC(学生选课表) S(SNO,SNAME)代表(学号,姓名) C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) SC(SNO,CNO,SC ...
- 动力节点 mysql 郭鑫 34道经典的面试题
DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `DEPTNO` int(2) NOT NULL COMMENT '部门编号', `DNAME` ...
- MYSQL 45道练习题
学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示.用S ...
- 34、mysql数据库(介绍)
34.1.什么是数据库: 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织. 描述和存储,具有较小的冗余,较高的数据独立性和易扩 ...
- MySQL优化|一分钟带你了解单表优化
在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程. 这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格,老杜真的是从MySQL基础一点点带我入门,基 ...
- 操作笔记:linux下安装mysql
1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev ...
- sqldeveloper连接mysql
sqldeveloper连接mysql 腑镜诏 钌d 汁叁ㄧ勋 佚蔡弥噙 不仅仅是越南帮和戴爷的事情还有谢婉莹的条 炔验遒其 倒扇油┣ 砹笄谤 几句话孟飞的信心大增兴奋不已换句话说 谠诂k厝 ...
随机推荐
- 【定时功能】消息的定时发送-基于RocketMQ
一.功能介绍 要实现一个消息的定时发送功能,也就是让消息可以在某一天某一个时间具体节点进行发送.而我们公司的业务场景是类似短信的业务,而且数量不小,用户会进行号码.消息内容.定时发送时间等信息的提交. ...
- 《深入了解java虚拟机》高效并发读书笔记——Java内存模型,线程,线程安全 与锁优化
<深入了解java虚拟机>高效并发读书笔记--Java内存模型,线程,线程安全 与锁优化 本文主要参考<深入了解java虚拟机>高效并发章节 关于锁升级,偏向锁,轻量级锁参考& ...
- CentOS Docker安装 && docker 基础指令
1 # 直接从官网下载docker的安装命令包(docker已经很贴心将安装shell脚本帮我们准备好了) 2 curl -fsSL get.docker.com -o get-docker.sh 3 ...
- 产品 | GreatSQL,打造更好的MGR生态
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 用 ...
- Chapter 02 - Let's Get Started(C#篇)
详细解释,书上有哈.直接上代码和结果. Xcode下的自定义类 (通过new file-> cocoa class创建,保持和书中名字一样RandomController),自定义的fields ...
- 聊聊Spring事务控制策略以及@Transactional失效问题避坑
大家好,又见面了. 在大部分涉及到数据库操作的项目里面,事务控制.事务处理都是一个无法回避的问题.比如,需要对SQL执行过程进行事务的控制与处理的时候,其整体的处理流程会是如下的示意: 首先是要开启事 ...
- Luogu2439 [SDOI2005]阶梯教室设备利用 (动态规划)
同上一题,区间改左闭右开就双倍经验了.貌似可以跑最长路. #include <iostream> #include <cstdio> #include <cstring& ...
- mybatis-plus 生成全套crud
pom依赖: <!-- web依赖--> <dependency> <groupId>org.springframework.boot</groupId> ...
- Jamie and Tree (dfs序 + 最近公共祖先LCA)
题面 题解 我们求它子树的权值和,一般用dfs序把树拍到线段树上做. 当它换根时,我们就直接把root赋值就行了,树的结构不去动它. 对于第二个操作,我们得到的链和根的相对位置有三种情况: 设两点为A ...
- HTML初学者小知识2
网页内嵌 代码以及演示如下 代码 <div id="tab_1"> <iframe src="div.html" height="5 ...