Mysql 通过子查询查找第二高工资
我有两张员工和部门的桌子 Employees表包含名称、薪资、部门id。 Departments表具有department\u id、department\u名称 我必须使用子查询显示工资第二高的员工(实际上,在employees表中,只有一名员工的工资第二高)及其部门名称Mysql 通过子查询查找第二高工资,mysql,sql,Mysql,Sql,我有两张员工和部门的桌子 Employees表包含名称、薪资、部门id。 Departments表具有department\u id、department\u名称 我必须使用子查询显示工资第二高的员工(实际上,在employees表中,只有一名员工的工资第二高)及其部门名称 select max(e.salary), d.department_name from oehr_employees e join oehr_departments d on(e.department
select
max(e.salary),
d.department_name
from oehr_employees e
join oehr_departments d on(e.department_id = d.department_id)
where e.salary not in(
select max(salary) from oehr_employees
)
group by department_name
试着做这个,但它只显示了每个部门的第二高工资。不知道该怎么办:/
试图寻找答案,但没有完全得到我想要的。如果你只是想要第二份更高的薪水,你可以使用限制和补偿 这不是一个有效的解决办法吗
select e.salary,d.department_name
from oehr_employees e
join oehr_departments d on(e.department_id = d.department_id)
ORDER BY e.salary DESC LIMIT 1 OFFSET 1
如果你想使用子查询,你可以试着像下面这样获得工资第二高的员工和部门的详细信息
select e.name,e.salary,d.department_id,d.department_name
from
oehr_employees e
join oehr_departments d on e.department_id = d.department_id
WHERE e.salary IN (SELECT Max(salary)
FROM oehr_employees
WHERE salary NOT IN (SELECT Max(salary)
FROM oehr_employees));
使用行号:
SELECT *
FROM (
SELECT
e.employee_id,
d.department_id,
e.salary,
ROW_NUMBER() OVER(ORDER BY e.salary DESC) rn
FROM oehr_employees e
INNER JOIN oehr_departments d
ON e.department_id = d.department_id
) x WHERE rn = 2
我只需稍微修改您的查询并添加限制1:
这似乎满足了使用子查询的神秘要求。这是一个合理的方法。在每个人或其部门员工中?子查询是简要说明的一部分?我需要通过子查询来完成。但是谢谢你提供了不同的解决方案。将编辑问题*如果有多个高薪人员怎么办?您可以按薪资分组,然后汇总部门名称。但如果是这样的话,也许使用窗口函数的解决方案会更好
select e.*, d.department_name
from oehr_employees e join
oehr_departments d
on e.department_id = d.department_id)
where e.salary < (select max(e2.salary) from oehr_employees e2)
order by e.salary desc
limit 1;