Я хочу отобразить некоторые столбцы таблицы на основе подзапроса

Я хочу показать номер отдела, имена и зарплаты сотрудников, которые получают максимальную зарплату в своих отделах, которые находятся в одной таблице.

Я использую оракул 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
Другие вопросы по тегам