PS:之前写过一篇文章,是另一种方法(关联子查询),感兴趣的可以去看一下:sql关于group by和max函数一起使用的坑(同理,求部门最高工资)_HD243608836的博客-CSDN博客

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

建表的SQL的语句

Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);
Create table If Not Exists Department (Id int, Name varchar(255));
insert into Employee (Id, Name, Salary, DepartmentId) values ('1', 'Joe', '70000', '1');
insert into Employee (Id, Name, Salary, DepartmentId) values ('2', 'Henry', '80000', '2');
insert into Employee (Id, Name, Salary, DepartmentId) values ('3', 'Sam', '60000', '2');
insert into Employee (Id, Name, Salary, DepartmentId) values ('4', 'Max', '90000', '1');
insert into Department (Id, Name) values ('1', 'IT');
insert into Department (Id, Name) values ('2', 'Sales');

分享一下group by在以下的多表查询中不可用,先给出错误的SQL语句,后面再给出正确语句和分析.

员工表employee,包括Id,Name,Salary,和DepartmentID,DepartmentID与部门id对应

部门表Department

需求 : 编写SQL语句查询每个部门中薪资最高的员工。每个部门只显示最高的工资的员工信息

错误的思路参考:

1、求各个部门最高工资

select max(salary) from employee group by DepartmentId

2、将最高工资表作虚拟表,查询出工资与最高工资相同的员工

select Department.name Department, employee.name Employee ,salary from employee join department on employee.DepartmentId = department.id where salary in (select max(salary) from employee group by DepartmentId)

貌似得到了想要的结果,但是出现以下情况时,得到的结果就是错误的:

当我改动joe的工资为80000时,得到的结果出乎意料:


为什么会出现这种情况?

where salary in
(select max(salary)
from employee
group by DepartmentId)

这里筛选条件相当是salary in (80000,90000)

下面给出正确的方式(不需要group by哦!!!)

select d.name Department,e1.name Employee,e1.salary Salary
from employee e1 left join employee e2
 on e1.salary < e2.salary and e1.DepartmentId=e2.DepartmentId
 join Department d on e1.DepartmentId = d.id
where e2.id is null

一段一段看

select *
 from
 employee e1 left join employee e2
 on e1.salary < e2.salary and e1.DepartmentId=e2.DepartmentId

自连接:连接的条件是e1工资比e2工资低,部门号相同,这是当同部门中e1中没有比自己工资高的,自动补null,也就是上图中的情况

此时连接部门表,再筛选出e2的id是null的行就是所要求的

Mysql多表查询,获取部门最高工资的sql语句方案相关推荐

  1. php多表数据排除,thinkphp中多表查询中防止数据重复的sql语句(必看)

    thinkphp中多表查询中防止数据重复的sql语句(必看) 这里有新鲜出炉的精品教程,程序狗速度看过来! ThinkPHP 开源 PHP 框架 ThinkPHP 是一个开源的 PHP 框架,是为了简 ...

  2. mysql纵表 主键_数据库面试题-sql语句

    原标题:数据库面试题-sql语句 1,写出一条Sql语句:取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:ID可能不是连续的. 答: → 解1: select top ...

  3. mysql 删除表记录的 存储过程命令_用SQL语句删除一个数据库的所有表和所有存储过程...

    如果数据库里有很多表和存储过程,要用手动鼠标右键一个个删除是很麻烦的,用SQL语句来删除就方便很多了 删除所有的表: 如果由于外键约束删除table失败,则先删除所有约束: --/第1步******* ...

  4. MySQL多表查询练习

    /* 多表查询 */-- 准备数据 -- 创建部门表 CREATE TABLE tb_dept (id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) ...

  5. mysql 伪表查询语句_MySql系列05:MySql中DQL查询操作

    1.表的准备 准备四张表: dept(部门表).emp(员工表).salgrade(薪资等级表).bonus(奖金表) create table DEPT( DEPTNO int(2) not nul ...

  6. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  7. mysql水果表查询_最全MySQL数据库表的查询操作

    序言 本节比较重要,对数据表数据进行查询操作,其中可能大家不熟悉的就对于INNER JOIN(内连接).LEFT JOIN(左连接).RIGHT JOIN(右连接)等一些复杂查询. 通过本节的学习,可 ...

  8. MySQL多表查询(8.0)

    文章目录 多表查询 1. 多表关系 1.1 一对多 1.2 多对多 1.3 一对一 2. 多表查询概述 2.1 数据准备 2.2 概述 2.3 分类 3. 内连接 4. 外连接 5. 自连接 5.1 ...

  9. Mysql多表查询效率的研究(一)

    Mysql多表查询效率的研究(一) 本文探究了mysql InnoDB引擎在多表查询的应用场景下,使用子表.内连接和左联接运行速度的差别,并且比较了索引使用与否对查询效率的影响. 第一部分简略地概括了 ...

最新文章

  1. 编译工具 之 ant
  2. maven插件的使用
  3. P1283 平板涂色
  4. 【无标题】服务机器人---SLAM算法之gmapping
  5. NLP之ASR:语音识别技术(Automatic Speech Recognition)的简介、发展历史、案例应用之详细攻略
  6. linux查端口占用
  7. CentOS上安装Jekins
  8. Web前端研发工程师编程能力飞升之路
  9. 芭蕉树上第十二根芭蕉--opencv配置问题
  10. 用计算机音乐的歌词,电脑酷狗音乐怎么在屏幕上显示歌词
  11. 81192!请返航!
  12. 饥荒独立服务器在线模式收不到,Windows 服务器搭建Don’t Starve Together饥荒独立服务器教程...
  13. 靖哥哥教你如何在docker中安装mysql
  14. 微信小程序wepy框架+minui踩坑之路
  15. 数学建模Word排版——样式
  16. JS 声音提示 兼容所有浏览器
  17. 【ffmpeg】YUV实践
  18. 计算机进行取模的原理,计算机组成原理中按2取模是什么意思?
  19. QQ客服链接(手机浏览器、PC电脑端点击链接直接打开手机QQ添加好友)
  20. Python 生成随机经纬度数据

热门文章

  1. 系统——windows10专业工作站版简单优化
  2. excel插入行 uipath_UIPath入門系列三之操作Excel表格
  3. Esp32-diy桌面可交互机器人
  4. 电机控制中标幺的目的
  5. 微信朋友圈,模仿微信朋友圈,朋友圈点赞评论
  6. 海信IP108H_S905L2_免拆_U盘卡刷固件包
  7. 如何在Angular框架中更好地使用字体?一篇文章解答!
  8. HI3515海思开发板移植3G模块笔记
  9. Flink Table API和SQL(下)
  10. 中国爱眼教育大会|2023山东眼健康产业展会|标展5500元