假设有一张桌子
Name Salary
Joe 4000
Steve 6000我可以这么做
select name from emp where salary = (select max(salary) from emp);但是,是否有一种无需使用子查询的方法来做到这一点呢?请帮帮忙。
编辑:对不起,我忘了说我使用的是Oracle 10g,而限制对它不起作用
发布于 2015-05-22 05:46:37
你没提到甲骨文的版本。
在Oracle 12上,可以使用一个新的低限制子句:
SELECT name
FROM emp
ORDER BY salary desc
FETCH FIRST 1 ROWS ONLY;文档中有一些示例:10002.htm#BABEAACC
在早期版本中,如果不使用子查询,则无法完成此操作,但如果必须创建视图:
CREATE VIEW emp_ordered AS
SELECT *
FROM emp
ORDER BY salary desc;然后以这样的方式查询此视图:
SELECT * FROM emp_ordered
WHERE rownum <=1发布于 2015-05-22 04:49:51
ANSI SQL应答(未指定dbms ):
select Name, Salary
from emp
order by Salary desc
fetch first 1 row only编辑:将使用较新的甲骨文版本。
发布于 2015-05-22 05:46:35
在Oracle 12c,中引入了顶n行限制特性。它允许在没有附加子查询的情况下对行进行排序。因此,在子查询中不再依赖ROWNUM和显式排序。
例如,
SQL> SELECT ename, sal FROM emp ORDER BY sal DESC
2 FETCH FIRST 1 row only;
ENAME SAL
---------- ----------
KING 5000
SQL>更新有关重复行
有一个带有的选项,它将包括重复的行。
例如,
SQL> insert into emp(empno, ename, sal) values(1234, 'LALIT', 5000);
1 row created.
SQL> SELECT ename, sal FROM emp ORDER BY sal DESC FETCH FIRST 1 ROWS WITH TIES;
ENAME SAL
---------- ----------
KING 5000
LALIT 5000
SQL>https://stackoverflow.com/questions/30388551
复制相似问题