Запрос без функции 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 предложение (хотя можно утверждать, что использование общего табличного выражения является способом обмана требования "без подзапроса")

Другие вопросы по тегам