美文网首页
牛客sql18 不使用orderby 求薪水第二多员工编号

牛客sql18 不使用orderby 求薪水第二多员工编号

作者: jiaway | 来源:发表于2020-09-18 10:43 被阅读0次

题目sql18

查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,你可以不使用order by完成吗
CREATE TABLE `employees` (
`emp_no` int(11) NOT NULL,
`birth_date` date NOT NULL,
`first_name` varchar(14) NOT NULL,
`last_name` varchar(16) NOT NULL,
`gender` char(1) NOT NULL,
`hire_date` date NOT NULL,
PRIMARY KEY (`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`));

解答
思路一 先做子查询找到max,然后找到< max的 中的最大值

select e.emp_no,s.salary,e.last_name,e.first_name from employees e,salaries s 
where
e.emp_no = s.emp_no
and
s.to_date='9999-01-01'
and s.salary = ( select max(s1.salary) from salaries s1 
where
s1.salary < ( select max(s2.salary) from salaries s2)) 

思路二 薪水表自相交,然后让左侧薪水 < 右侧薪水,count() 为1 时是第一大,为2 时是第二大,为3 时是第三大

select e.emp_no,s.salary,e.last_name,e.first_name from employees e,salaries s 
where
e.emp_no = s.emp_no
and
s.to_date='9999-01-01'
and s.salary = (
select s2.salary from salaries s1,salaries s2 
where 
s1.salary <= s2.salary group by s1.salary having count(distinct s2.salary)=2
)

相关文章

  • 牛客sql18 不使用orderby 求薪水第二多员工编号

    题目sql18 解答思路一 先做子查询找到max,然后找到< max的 中的最大值 思路二 薪水表自相交,然后让左...

  • 牛客网SQL实战练习——21~25

    牛客网SQL实战练习——21~25 21.查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应...

  • 18.查找当前薪水(to_date='9999-01-01')排

    查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、las...

  • 数据库SQL实战|SQL答案集合及解析(21-30)

    牛客数据库SQL实战题(21-30题) 21、查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其...

  • sql5

    题目描述 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salar...

  • SQL排名问题

    一、任意名次 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水sal...

  • sql之自连接

    题目:查找当前薪水(to_date='9999-01-01')排名第n多的员工编号emp_no、薪水salary、...

  • 字节跳动面试题:你的平均薪水是多少?

    薪水表中记录了员工的编号,所在部门编号,和薪水。 查询出每个部门除去最高、最低薪水后的平均薪水,并保留整数。(字节...

  • 牛客网SQL实战练习——6~10

    牛客网SQL实战练习——6~10 声明:练习牛客网SQL实战题目,整理笔记。6.查找所有员工入职时候的薪水情况,给...

  • SQL14

    题目描述给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅...

网友评论

      本文标题:牛客sql18 不使用orderby 求薪水第二多员工编号

      本文链接:https://www.haomeiwen.com/subject/unigjktx.html