*18、查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by

1、题目描述:

查找当前薪水(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`));

输入描述:

输出描述:

emp_no salary last_name first_name
10009 94409 Peac Sumant

2、代码:

(1)解法1:除了最高工资就是它最高,先找到最高工资,然后找到第二高工资

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

(2)解法2:表内连接求第二高工资

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

原文地址:https://www.cnblogs.com/guoyu1/p/12242344.html

时间: 2024-11-06 15:11:07

*18、查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by的相关文章

查找当前薪水(to_date=&#39;9999-01-01&#39;)排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by

题目描述 查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no.薪水salary.last_name以及first_name,不准使用order byCREATE 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` ch

SQL-17 获取当前(to_date=&#39;9999-01-01&#39;)薪水第二多的员工的emp_no以及其对应的薪水salary

题目描述 获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salaryCREATE 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 salar

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

1.题目描述: 获取当前(to_date='9999-01-01')薪水第二多的员工的emp_no以及其对应的薪水salaryCREATE 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 sa

查找员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth

也有老哥是将最近日期的薪水和最远日期的薪水全都查找出来再进行计算, 但我觉得应该不会有公司给员工降薪水吧!不过还是应该学习这种严谨的方法的! 原文地址:https://www.cnblogs.com/jiguang321/p/12009999.html

给出每个员工每年薪水涨幅超过5000的员工编号emp_no、薪水变更开始日期from_date以及薪水涨幅值salary_growth,并按照salary_growth逆序排列。

这道题就是结合两个表进行查询 不过这个每年薪水变化这个条件有点模糊,不容易理解 原文地址:https://www.cnblogs.com/jiguang321/p/12038686.html

查找各个部门当前(to_date=&#39;9999-01-01&#39;)领导当前薪水详情以及其对应部门编号dept_no

首先根据工号emp_no连接两个表,然后由于需要查询当前还处于在职状态的领导的薪水,所以需要加上 where s.to_date='9999-01-01'and d.to_date='9999-01-01' 查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_no 原文地址:https://www.cnblogs.com/jiguang321/p/11973781.html

SQL实战——03. 查找各个部门当前(to_date=&#39;9999-01-01&#39;)领导当前薪水详情以及其对应部门编号dept_no

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_noCREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TABLE `salaries` (`emp_

2.oracle分页,找到员工表中薪水大于本部门平均薪水的员工

 ROWNUM的知识点 A ROWNUM按照oracle的默认机制生成. B rownum只能使用<=  <号,不能使用>  >= rownum的实现机制 rownum表示,返回的结果集的行号(是一个属性,固化到一行之中,不会因为你排序,而发生变化).没有第一行,就没有第二行:没有第二行就没有第三行. Oracle Top-N select rownum,empno,ename,sal from (select empno,ename,sal from emp order by

查找所有已经分配部门的员工的last_name和first_name之SQL实现

题目描述 查找所有已经分配部门的员工的last_name和first_nameCREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL,`dept_no` char(4) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TABLE `employees` (`emp_no` int(11) NOT NU