查询每个部门工资最高的前两名的姓名和部门名称

  • 第一种解决方案:
  • 第二种解决方案:

SQL练习题:
假设一个部门有4个人,A,B,C,D
A的工资=10000
B的工资=9000
C的工资=8000
D的工资=7000

问题:现在要找出这个部门工资最高的两个人

第一种解决方案:

SELECT e.*,d.*
FROMemp e WHERE (SELECT COUNT(*) FROMemp p WHERE e.dept2 = p.dept2 AND e.incoming < p.incoming) < 2
ORDER BY sid,e.incoming ;

方案解析:
根据题目的要求分析,可以得出下面两条结论,满足这两条结论的人就是要找的前两人:
1,比第一高工资高的人为0个,count的数量<2
2,比第二高工资高的人为1个,count的数量<2

那么现在开始比较(e.incoming < p.incoming),
1,A和部门里面所有的人进行对比,并对比对的结果进行统计。
A<A false
A<B false
A<C false
A<D false
统计结果,count的数量的为0
那么根据上面的结论 A满足第一条结论。

2,B和部门里面所有的人进行对比,并对比对的结果进行统计。
B<A true
B<B false
B<C false
B<D false
统计结果,count的数量为1
那么根据上面的结论 B满足第二条结论。

3,C和部门里面所有的人进行对比,并对比对的结果进行统计。
C<A true
C<B true
C<C false
C<D false
统计结果,count的数量为2
那么根据上面的结论 C不满足两条结论。

4,D和部门里面所有的人进行对比,并对比对的结果进行统计。
D<A true
D<B true
D<C true
D<D false
统计结果,count的数量为3
那么根据上面的结论 D不满足两条结论。

那么最终比对完成后满足结论的就只有A和B

第二种解决方案:

SELECT bb.* FROM
(SELECT (@j:=@j+1) pm,s.* FROM emp s,(SELECT @j:=0)t GROUP BY sid ORDER BY dept2 ASC ,incoming DESC
)bb
INNER JOIN
(SELECT tt.dept2,MIN(tt.pm) pm FROM (SELECT (@i:=@i+1) pm,s.* FROM emp s,(SELECT @i:=0)t GROUP BY sid ORDER BY dept2 ASC ,incoming DESC)tt GROUP BY tt.dept2
)cc
ON cc.dept2 = bb.dept2 WHERE bb.pm < cc.pm + 2

方案解析:

1,添加排名伪列
例如:

姓名 部门ID 工资
A 1 9000
B 1 8000
C 1 10000
D 1 7000

执行如下SQL:

SELECT (@j:=@j+1) pm,s.* FROM emp s,(SELECT @j:=0)t GROUP BY sid ORDER BY dept2 ASC ,incoming DESC

得到临时bb表

PM 姓名 部门ID 工资
1 C 1 10000
2 A 1 9000
3 B 1 8000
4 D 1 7000

2,求出一个部门排名第一的

执行如下SQL:

SELECT tt.dept2,MIN(tt.pm) pm FROM
(SELECT (@i:=@i+1) pm,s.* FROM emp s,(SELECT @i:=0)t GROUP BY sid ORDER BY dept2 ASC ,incoming DESC
)tt GROUP BY tt.dept2

得到临时cc表

PM 部门ID
1 1

3,临时表对比排名求出结果(WHERE bb.pm < cc.pm + 2)
这里+2的目的就是要求前几名就+多少。比如前两名就+2,前三名就+3

最终结果:

PM 姓名 部门ID 工资
1 C 1 10000
2 A 1 9000

SQL练习题_ 查询每个部门工资最高的前两名的姓名和部门名称【多测师_何sir】相关推荐

  1. mysql 查询前两名_Mysql:查询每门课程成绩的前两名

    一张成绩表,查询每门课程的前两名,咋一看无从下手,其实可以理解为表自连接 . 建表语句: CREATE TABLE `Department` ( `Id` int(11) NOT NULL DEFAU ...

  2. python:使用任意语言,递归地将某个磁盘目录下的 jpeg 文件的扩展名修改为 jpg【杭州多测师_王sir】【杭州多测师】...

    1.使用 Shell 命令,从 example.log 日志文件中,统计最后 100 行内,包含 "test" 字符串的行数 2.使用任意语言,递归地将某个磁盘目录下的 jpeg  ...

  3. mysql每学科前两名 having_mysql 分组查询前n条数据

    今天去面试,碰到一道面试题: 有一个学生成绩表,表中有 表id.学生名.学科.分数.学生id .查询每科学习最好的两名学生的信息: 建表sql: CREATE TABLE `stuscore` ( ` ...

  4. mysql查询每个部门工资最高的员工信息_SQL简单面试题:查询每个部门工资最高的前10位员工...

    前段时间同事突然甩了一个SQL面试题给我,题目是需要查询每个部门工资最高的前10位员工.想着查每个部门的最高还好,用max语句就可以搞定,这是要取前十.... 快速构建了一下思路,查了一下有没有类似的 ...

  5. mysql查询每门功课成绩最好的前两名_用一个SQL查询语句得出每门功课成绩最好的前两名 - SQL Server论坛 - 51CTO技术论坛_中国领先的IT技术社区...

    有一个学生表,里面有  学号 功课编号 学生成绩三个字段. 用一个SQL查询语句得出每门功课成绩最好的前两名 学号  功课编号     学生成绩 1          1             99 ...

  6. mysql查询选课程的学生学号和姓名_数据库SQL语句中查询选修了全部课程的学生的学号和姓名理解...

    首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOTEXISTS子查询中找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如FOR ...

  7. 【sql: 练习题 28 ,29】查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况),查询任何一门课程成绩在 70 分以上的姓名、课程名称和分数...

    题目:查询所有学生的课程及分数情况(存在学生没成绩,没选课的情况) 分析: 这个应该是student表 和  student_score表进行联合查询,因为存在学生没成绩,没选课的情况,所以要用lef ...

  8. 查询成绩最好的前两名_SQL查询整理

    SQL查询相关知识整理 习题中会用到的表 一.简单查询 1.查询姓"猴"的学生名单 select 学号,姓名 from student where 姓名 like '猴%': 2. ...

  9. Java Spring框架入门详解教程【多测师_何sir】

    Spring框架入门详解教程 spring概述 spring结构 spring IOC spring DI spring概述 Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多 ...

最新文章

  1. layui时间怎么设置年月日时分秒_layui-laydate时间日历控件使用方法详解
  2. 学会python爬虫怎么赚钱-学会python爬虫怎么赚钱
  3. 错误The type XXX is deprecated解决
  4. fluent p1模型_Fluent辐射传热模型理论以及相关设置-转载 于 作者:Libo Chen
  5. [51CTO]给您介绍Windows10各大版本之间区别
  6. icpc网络赛第二场K Meal
  7. CodeForces - 796D Police Stations bfs
  8. 深度残差网络的无人机多目标识别
  9. Redis(十):Redis特殊类型之Hyperloglog基数统计
  10. CSS 背景图片 设置居中
  11. mysql linux 数据库文件位置_mysql在linux下修改mysql数据库文件位置
  12. java 中方法的使用,两个实例教你学会java中方法的使用
  13. Windows移动开发(三)——闭关修炼
  14. nginx源码安装及配置https自签名
  15. 计算机管理 没有初始化,win7系统电脑新增的硬盘没有初始化的解决方法
  16. Can not import avx core while this file exists
  17. 网工行业里的多面手,数据通信工程师2022年最新系统学习路线整理
  18. Springboot 整合百度地图 API
  19. cortex a7 a53_试驾初体验--我与奥迪A7的七天之旅
  20. 五种提前还款方式那种更划算

热门文章

  1. Word高效指南 - 快速合并多个文档
  2. 郭秀闲:我如何看待埃维诺的未来发展
  3. win7 ie8 oracle erp
  4. Autojs脚本 最新加密工具 Autojs庖丁 3.2.0 去强制更新
  5. 怎么用j-link+j-flash烧写MM32
  6. css hack *html,css hack 大全 各个浏览器的css
  7. python界面设计-文件操作excel读写-发动机激励、悬置系统模态及振动计算
  8. java中计算三角形的角度
  9. python signal模块_Python signal 信号模块和进程
  10. Matlab 图像几何变换