我有两个表员工和部门。
Employees表具有名称,薪水和部门编号。 部门表具有部门编号,部门名称
我必须使用子查询显示第二高的雇员(实际上是雇员表中每个雇员中唯一拥有第二高工资的雇员)及其部门名称
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
试图做到这一点,但它仅显示每个部门的第二高薪水。不知道该怎么办:/
试图搜索答案,但没有完全得到我想要的。
答案 0 :(得分:0)
如果只想再拿高一点的薪水,可以使用限制和补偿。
这不是一个有效的解决方案吗?
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
答案 1 :(得分:0)
如果要使用子查询来执行此操作,可以尝试以下操作以获取薪水第二高的员工和部门的详细信息。
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));
答案 2 :(得分:0)
使用ROW_NUMBER():
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
答案 3 :(得分:0)
我只需要稍微修改一下查询并添加limit 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;
这似乎满足使用子查询的不可思议的要求。这是一种合理的方法。