老杜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道作业题的更多相关文章

  1. 老杜告诉你java小白到大神是怎么炼成的(转载)

    老杜告诉你java小白到大神是怎么炼成的 1. 学习前的准备 一个好的学习方法(应该怎么学习更高效): 一个合格的程序员应该具备两个能力 有一个很好的指法速度(敲代码快) 有一个很好的编程思想(编程思 ...

  2. 动力节点 mysql 郭鑫 34道经典的面试题三

    1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...

  3. 动力节点 mysql 郭鑫 34道经典的面试题二

    13.有3个表S(学生表),C(课程表),SC(学生选课表) S(SNO,SNAME)代表(学号,姓名) C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) SC(SNO,CNO,SC ...

  4. 动力节点 mysql 郭鑫 34道经典的面试题

    DROP TABLE IF EXISTS `dept`; CREATE TABLE `dept` ( `DEPTNO` int(2) NOT NULL COMMENT '部门编号', `DNAME` ...

  5. MYSQL 45道练习题

    学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示.用S ...

  6. 34、mysql数据库(介绍)

    34.1.什么是数据库: 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织. 描述和存储,具有较小的冗余,较高的数据独立性和易扩 ...

  7. MySQL优化|一分钟带你了解单表优化

    在开始前,分享给大家我看过觉得讲数据库讲的算是很不错的,也在B站拥有百万播放量的教程. 这个MySQL视频是动力节点的老杜讲解,个人也很喜欢老杜的教学风格,老杜真的是从MySQL基础一点点带我入门,基 ...

  8. 操作笔记:linux下安装mysql

    1,检查linux下是否安装了mysql shell指令如下: [root@iZ945sgm0ugZ ~]# rpm -qa|grep -i mysql 如果有的话:做出挨个删除(eg:rpm -ev ...

  9. sqldeveloper连接mysql

    sqldeveloper连接mysql 腑镜诏 钌d 汁叁ㄧ勋 佚蔡弥噙 不仅仅是越南帮和戴爷的事情还有谢婉莹的条 炔验遒其 倒扇油┣ 砹笄谤 几句话孟飞的信心大增兴奋不已换句话说 谠诂k厝 ...

随机推荐

  1. 使用github action发布hexo博客到云服务器

    目录 搭建Hexo博客 安装主题hexo-theme-bamboo 修改博客名称等信息 添加github action发布 1. 在github中创建自己的博客仓库 2. 设置Secrets 3. 在 ...

  2. VirtualBox 相关命令行

    简介 由于之前项目有一个需求,则是自动化创建虚拟机并加载相关配置,创建虚拟机无法避免对于虚拟机系统的设置,因此采用导入虚拟机的方式,并通过查阅virtualbox相关手册,知晓virtualbox可以 ...

  3. 0202年,您真的需要Thrift这样一个RPC微服务框架来拯救一下传统HTTP接口(api)了

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_104 目前市面上类似Django的drf框架基于json的http接口解决方案大行其道,人们也热衷于在接口不多.系统与系统交互较少 ...

  4. Vue3:不常用的Composition API && Fragment、Teleport、Suspense && 与Vue2对比的一些变化

    1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...

  5. 无法访问mybatis.dto.StudengInVO-使用maven编译报错-2022新项目

    一.问题由来 最近一次拉代码后,合并代码然后进行编译时出现一个问题,使用maven在进行编译的时候报一个错,无法访问mybatis.dto.StudengInVO. 突然出现这个错误让自己感觉很奇怪, ...

  6. RocketMQ 详解系列

    什么是RocketMQ RocketMQ作为一款纯java.分布式.队列模型的开源消息中间件,支持事务消息.顺序消息.批量消息.定时消息.消息回溯等.主要功能是异步解耦和流量削峰:. 常见的MQ主要有 ...

  7. SvelteUI:运用svelte3构建的网页版UI组件库(升级版)

    距离上次分享的svelte-ui 1.0已经一月有余,这次带来全新升级完整版svelte-ui 2.0. 这次优化并新增15+个组件.在开发之初借鉴了element-ui组件库,所以在组件结构及语法上 ...

  8. 安装 NetworkManager(Debian最小化安装)

    Debian最小化安装是没有NetworkManager 1 安装: 2 [root@debian]apt install -y netwok-manager 1 启动(查看网卡): 2 [root@ ...

  9. Spring Boot部署方法

    Spring Boot部署方法     网上搜到的部署方法无非是打成jar包,然后shell执行nohup java调用jar命令,或者是打成war包然后部署到tomcat或者jetty容器上面. S ...

  10. ArkUI 组件 Props

    在上一篇博客文章中简单地提到了 Props . 在使用 Props 时需要注意到一个点,子组件从寄主页面传递过来的值是单向的,也就是子组件不能直接修改传递下来的值,即单向性. 以上篇文章定义的头像组件 ...