Я хочу отобразить некоторые столбцы таблицы на основе подзапроса
Я хочу показать номер отдела, имена и зарплаты сотрудников, которые получают максимальную зарплату в своих отделах, которые находятся в одной таблице.
Я использую оракул sql. Структура таблицы, которую я использую,
Emp(Empno,Ename,Job,Salary,Deptno)
Я читал об этом, и я думаю, что это можно сделать с помощью коррелированных подзапросов. Запрошенный мной запрос был
select E1.Ename,E1.Ename,E1.Salary
from Emp E1
where E1.Empno=(
select Empno
from Emp E2
where Salary=(
select max(Salary)
from Emp
where Deptno=E1.Deptno
)
);
Это дает сообщение об ошибке "однострочный подзапрос возвращает более одной строки". Что я делаю неправильно? Что нужно сделать, чтобы исправить это?
1 ответ
SELECT EmpNo, Ename,Job,Salary,Deptno
FROM
(
SELECT EmpNo, Ename,Job,Salary,Deptno,
DENSE_RANK() OVER (PARTITION BY DeptNo
ORDER BY Salary DESC ) rn
FROM Emp
) a
WHERE a.rn = 1
или с помощью MAX
SELECT a.*
FROM Emp a
INNER JOIN
(
SELECT DeptNo, MAX(Salary) Max_sal
FROM Emp
GROUP BY DeptNo
) b ON a.DeptNo = b.DeptNo AND
a.Salary = b.Max_SAL