Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不带MAX函数的查询_Sql_Oracle_Function_Max - Fatal编程技术网

Sql 不带MAX函数的查询

Sql 不带MAX函数的查询,sql,oracle,function,max,Sql,Oracle,Function,Max,我需要做一个查询,以获得没有MAX函数的最高工资的员工。 我搜索了一些方法,发现“rownum”与“orderby”组合在一起,但要正确地执行此操作,我们需要对from子句进行子查询,我不能这样做,因为老师禁止这样做 有人知道解决办法吗 感谢并原谅我的英语。您可以使用一些不常用的半连接: WHERE employee.salary >= ALL (...subquery...) 还有许多其他可能性,例如,不存在 SELECT deptno, e1.empno, e1.sal FROM

我需要做一个查询,以获得没有MAX函数的最高工资的员工。 我搜索了一些方法,发现“rownum”与“orderby”组合在一起,但要正确地执行此操作,我们需要对from子句进行子查询,我不能这样做,因为老师禁止这样做

有人知道解决办法吗


感谢并原谅我的英语。

您可以使用一些不常用的半连接:

WHERE employee.salary >= ALL (...subquery...)
还有许多其他可能性,例如,
不存在

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
返回不使用秩或最大值的薪酬最高的员工

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
子句中使用子查询(尽管有人可能会认为使用公共表表达式是绕过“无子查询”要求的一种方法)

老师不也禁止在堆栈溢出问题上提问作弊吗?无论这是否是你的家庭作业,在堆栈溢出问题上提问的最低标准都适用。你已经确定了你的问题,现在你做了什么来解决它?您的查询是什么样的,示例数据和最终结果是什么?为什么您的查询不起作用?您收到了什么错误消息(如果有的话)?对不起,我已经在两个小时内测试了查询,但没有成功。我会直接问老师这个问题。Naomi,下次试着更全面一些。问题是from子句中的子查询也是被禁止的。我想。这个解决方案似乎已经被拒绝了。我以为他说他需要做一个子查询,因为max()函数是被禁止的。我想我们会看到的。
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;