Запрос без функции MAX
Мне нужно сделать запрос, чтобы получить сотрудников с самой высокой зарплатой без функции MAX. Я искал способы сделать это и нашел 'rownum' в сочетании с 'order by', но чтобы сделать это правильно, нам нужно выполнить подзапрос в предложении from, я не могу сделать это, потому что это запрещено учителем.
Кто-то знает решение?
Спасибо и извините за мой английский.
4 ответа
Вы можете использовать нечасто используемый SEMI-JOIN:
WHERE employee.salary >= ALL (...subquery...)
Есть много других возможностей, например, с NOT EXISTS
,
SELECT deptno, e1.empno, e1.sal
FROM scott.emp e1
WHERE e1.sal >= ALL (SELECT e2.sal
FROM scott.emp e2
WHERE e2.deptno = 20 -- or e2.deptno = e1.deptno
)
ORDER BY deptno
/
DEPTNO EMPNO SAL
------------------------
10 7839 5000
20 7788 3000
20 7902 3000
Select employee FROM
(Select * FROM tblEmployees ORDER BY Salary DESC)
Where rownum = 1;
Возвращает сотрудника с самой высокой зарплатой без использования ранга или макс.
with emp_data as (
select empno,
sal,
deptno,
row_number() over (order by sal desc) as rn
from emp
)
select *
from emp_data
where rn = 1;
Это ни с использованием max()
ни используя подзапрос в from
предложение (хотя можно утверждать, что использование общего табличного выражения является способом обмана требования "без подзапроса")