首页 > 数据库 >SQL获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

SQL获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

时间:2024-07-03 21:28:08浏览次数:23  
标签:salary name no 薪水 salaries -- emp

系列文章目录


文章目录


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


描述
有一个员工表employees简况如下:
在这里插入图片描述
有一个薪水表salaries简况如下:
在这里插入图片描述
请你查找薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不能使用order by完成,以上例子输出为:
(温馨提示:sqlite通过的代码不一定能通过mysql,因为SQL语法规定,使用聚合函数时,select子句中一般只能存在以下三种元素:常数、聚合函数,group by 指定的列名。如果使用非group by的列名,sqlite的结果和mysql 可能不一样)
在这里插入图片描述

-- 方法一
select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary =              -- 第三步: 将第二高工资作为查询条件
    (
    select max(salary)        -- 第二步: 查出除了原表最高工资以外的最高工资(第二高工资)
    from salaries
    where salary <   
        (
        select max(salary)    -- 第一步: 查出原表最高工资
        from salaries
        where to_date = '9999-01-01'  
        )
    and to_date = '9999-01-01'
    )
and s.to_date = '9999-01-01'
 
 
 
-- 方法二
select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary =
    (
    select s1.salary
    from salaries s1 join salaries s2      -- 自连接查询
    on s1.salary <= s2.salary
    group by s1.salary                     -- 当s1<=s2链接并以s1.salary分组时一个s1会对应多个s2
    having count(distinct s2.salary) = 2   -- (去重之后的数量就是对应的名次)
    and s1.to_date = '9999-01-01'
    and s2.to_date = '9999-01-01'
    )
and s.to_date = '9999-01-01'

表自连接以后:

在这里插入图片描述
当s1<=s2链接并以s1.salary分组时一个s1会对应多个s2

在这里插入图片描述
对s2进行去重统计数量, 就是s1对应的排名

标签:salary,name,no,薪水,salaries,--,emp
From: https://blog.csdn.net/pleaseprintf/article/details/140088845

相关文章

  • 车载测试之-CANoe创建仿真工程
    在现代汽车工业中,车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程,不仅能够模拟真实的车辆环境,还能大大提升测试效率和准确性。那么,CANoe是如何实现这些的呢?车载测试中,为什么选择使用CANoe创建仿真工程?它具备哪些独特的功能和优势,能够在复杂的车......
  • CANoe创建仿真工程
    在现代汽车工业中,车载测试是确保车辆电子系统可靠性和功能性的关键环节。而使用CANoe创建仿真工程,不仅能够模拟真实的车辆环境,还能大大提升测试效率和准确性。那么,CANoe是如何实现这些的呢? 车载测试中,为什么选择使用CANoe创建仿真工程?它具备哪些独特的功能和优势,能够在复杂的......
  • 关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单
    以unordered_set为例,首先在cppreference中查看其模板定义:可以看到Hash类默认是std::hash<Key,KeyEqual类似,本文将Hash以函数对象写出,将KeyEqual以lambda写出。classhashvec{ public: size_toperator()(constvector<int>&vec)const{ returnhash<int>()(vec[0])+hash......
  • Derect local .aar file dependencies are not supported when building an AAR
    背景项目中需要将部分功能业务打包成aar包供其它项目调用,我引入了fataar(具体使用方式见github)。实际打包过程中抛出错误Derectlocal.aarfiledependenciesarenotsupportedwhenbuildinganAAR原因分析我们项目中lib文件夹下导入了很多jar包、aar包,在之前没有引入aar包......
  • 调用自定义模块出现ModuleNotFoundError
    产生问题的原因:IDE(pycharm)没有将自定义模块所在目录添加到工作目录中,导致在搜索目录中找不到要调用的模块。Python会在以下路径中搜索它想要寻找的模块:程序所在的文件夹标准库的安装路径操作系统环境变量PYTHONPATH所包含的路径解决方法1:在调用自定义模块前先将自定义模块/......
  • nohup命令:Linux保持进程运行的利器
    在Linux系统中,nohup命令是一种非常有用的工具,用于在用户退出登录或关闭终端时保持进程的运行。本文将深入讲解nohup命令的作用、使用方法以及相关注意事项,帮助读者充分利用这个强大的命令。nohup命令的作用​nohup​是"nohangup"的缩写,它的主要作用是在后台运行一个命令或进......
  • centos系统构建安装john导致的编译问题error: size of array element is not a multip
    blake2.h:112:5:error:sizeofarrayelementisnotamultipleofitsalignment112|blake2b_stateS[4][1];|^~~~~~~~~~~~~blake2.h:113:5:error:sizeofarrayelementisnotamultipleofitsalignment113|blake2b_stateR[1];......
  • q-analog 和 q-binomial
    模拟赛四道题三道是计数,不得不来看一看这个。当一个表达式\(f(q)\)满足\(\lim_{q\to1}f(q)=c\)时,称它是\(c\)的\(q-\)analog。例如\([n]_q=\frac{1-q^n}{1-q}=(1+q+q^2+\cdots+q^{n-1})\)是\(n\)的\(q-\)analog,因为它满足上述定义。一个自然数\(n\)的\(q-\)fact......
  • 聚簇索引(MySQL-InnoDB引擎下)
    聚簇索引(MySQL-InnoDB引擎下)聚簇索引并不是一种单独的索引类型,而是一种存储方式。顾名思义,聚簇,使得数据行和相邻的键值紧促的存储在一起。(物理上的)聚簇索引的数据分布Mysql内置的存储引擎并不支持选择用于聚簇的索引,主键索引默认就是聚簇索引。聚簇索引的优点:1.可以将相互关......
  • 解决办法:hyper-v导出虚拟机到ESXI报错找不到磁盘:dev disk by-uuid 4b85b6e9-f0d1-4dc
    linux救援模式可以进入系统,发现UUID都是正常的。执行以下命令确认的:[root@localhost~]#cat/etc/fstabUUID=4b85b6e9-f0d1-4dc8-a9dd-aafad7b4354c/xfsdefaults00UUID=24c8c603-e6bd-453c-982f-79e9df3468fd/bootxfsdefaults00UUID=53608cf9-17c1-40c5-85ed-f88......