题目描述

对所有员工的当前(to_date=‘9999-01-01’)薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

建表语句:

CREATE TABLE `salaries` (
`emp_no` int(11) NOT NULL,
`salary` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`from_date`));

输出描述:

emp_no salary rank
10005 94692 1
10002 94409 2
10010 94409 2
10001 88958 3
10007 88958 3
10004 74057 4

不看最后一个rank排名,那么这道题特别简单:

select s.emp_no, s.salary
from salaries s
where s.to_date = '9999-01-01'
order by s.salary desc, s.emp_no asc

但是题目偏偏加了一个rank工资排名。那么怎样才能获得这个排名呢?

在Java中我们可以直接使用循环来给目标值加排名,SQL查询语句中看来行不通。仅仅使用一张表似乎达不到目的,那就使用两张表吧。

既然不能使用循环,那么可以通过什么方法来表示排名,或者说是表示在自己的前面还有多少人(包括自己)

很明显了,我们可以通过两张表中salary的大小不同来获取在自己前面的人的个数,即s1.salary <= s2.salary。举个栗子:

有三个salary(6000,5000,4000, 4000),输出为s1.salary,那么当s1.salary = 6000时,s1.salary <= s2.salary 的值为6000,也就是一个,当s1.salary = 5000时,s1.salary <= s2.salary 的值为6000和5000两个。但是当s1.salary = 4000时,s1.salary <= s2.salary 的值就为(6000,5000,4000, 4000)四个,且4000是重复的,因此我们使用count(distinct s2.salary) rank 来去重,并计算个数,即排名,以此类推,输出s1.salary的情况下,有多少个s2.salary大于等于s1.salary就是s1.salary的排名

当然不要忘了group by s1.emp_no ,用来将员工编号分组,计算count()

最后结果为:

select s1.emp_no, s1.salary, count(distinct s2.salary) rank
from salaries s1, salaries s2
where s1.salary <= s2.salary and s1.to_date = '9999-01-01' and s2.to_date = '9999-01-01'
group by s1.emp_no
order by rank

SQL语句——对所有员工的薪水按照salary进行按照1-N的排名相关推荐

  1. 使用sql语句在emp员工表中实现各种操作

    使用sql语句在emp员工表中实现各种操作 emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期/sal薪金/comm佣金/deptno所属部门编号 ...

  2. 牛客网数据库SQL实战23—— 对所有员工的薪水按照salary进行按照1-N的排名

    牛客网数据库SQL实战23-- 对所有员工的薪水按照salary进行按照1-N的排名 题目描述 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相 ...

  3. ORACLE中使用SQL语句查询所有员工的职位信息,并用DISTINCT消除重复信息。

    ORACLE中使用SQL语句查询所有员工的职位信息,并用DISTINCT消除重复信息. 在sqlplus中执行下面语句: select job from emp: 显示结果如下: SQL> se ...

  4. Python编程 模拟SQL语句 实现对员工信息的增删改查

    一.问题描述 用 Python 模拟 sql 语句,实现对员工信息的增删改查. 封装函数,传入参数:文件路径和 sql 命令. 模拟 sql 语句实现对员工信息的现增删改查,并打印结果. 二.Pyth ...

  5. sql语句-平均工资-员工工资

    表创建: 员工表: DROP TABLE IF EXISTS `employee`;     CREATE TABLE `employee` (           `emp_id` int(11) ...

  6. Mysql - 对所有员工的薪水按照salary进行按照1-N的排名

  7. sql语句面试经典题型

    目录 案例一:获取每个部门中当前员工薪水最高的相关信息,给出dept_no, emp_no以及其对应的salary,按照部门编号dept_no升序排列 案例二:请你获取薪水第二多的员工的emp_no以 ...

  8. oracle与sql语句

    oracle与sql语句 数据库基础 Oracle数据库安装及访问 Oracle相关操作 创建表空间与用户 创建表 Oracle数据类型 创建表 修改表 DML语句 INSERT语句 UPDATE语句 ...

  9. python对excel增删改查语句_利用python模拟sql语句对员工表格进行增删改查

    本文主要给大家介绍了关于python模拟sql语句对员工表格进行增删改查的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 具体需求: 员工信息表程序,实现增删改查操作: 可进行模糊查询, ...

最新文章

  1. 【Java】剑指 Offer II 022. 链表中环的入口节点
  2. php in_array 遍历,in_array大数组查询性能问题
  3. UVA 311 Packets
  4. 牛客网——华为机试(题17:坐标移动)(Java)
  5. 这个高度站立办公十分的棒
  6. python中进制chr_python中的chr() 如何返回字符?
  7. 下载 sdk struts java
  8. iphone11什么时候上市_红米k30s至尊纪念版什么时候上市开售 预售地址入口
  9. ORACLE虚拟索引(Virtual Index)
  10. 述职答辩提问环节一般可以问些什么_陕西省高级职称评审,90%的人都“死”在答辩上?...
  11. 相关矩阵可视化 – corrplot() 绘图
  12. Red5 java项目创建
  13. 心情好,贴一小段自己写的VBS服务器端过程,做了适度封装
  14. 金山WPS笔试题总结
  15. cad卸载工具_CAD安装失败都是红?
  16. provide和inject 用法
  17. 路由器AP、中继、桥接等模式区别
  18. Universal USB Installer – 免光驱将U盘打造成Windows、Linux系统安装盘
  19. 历时三年,Filecoin 主网正式上线 | 一周问答热议
  20. SpringCloud( H版 alibaba )框架开发教程(中级)

热门文章

  1. 2017.2.15 日课
  2. Oracle数据库用管理员登录,oracle数据库关于用户登录
  3. codeforces 101986 C Medical Checkup
  4. 程序验证(一):命题逻辑
  5. 转战“小家电”后 ,苏泊尔掉队了吗?
  6. ORB-SLAM3 细读单目初始化过程(下)
  7. ZooKeeper 会话超时
  8. 宏定义中的 ## ... __VA_ARGS__
  9. kail 工具使用(一) ddos 攻击
  10. 嵌入式系统设计信息交流 微信讨论组