首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示最高薪资持有人的姓名(不使用SUBQUERY)

显示最高薪资持有人的姓名(不使用SUBQUERY)
EN

Stack Overflow用户
提问于 2015-05-22 04:47:50
回答 5查看 563关注 0票数 3

假设有一张桌子

代码语言:javascript
复制
Name  Salary
Joe   4000
Steve 6000

我可以这么做

代码语言:javascript
复制
select name from emp where salary = (select max(salary) from emp);

但是,是否有一种无需使用子查询的方法来做到这一点呢?请帮帮忙。

编辑:对不起,我忘了说我使用的是Oracle 10g,而限制对它不起作用

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-05-22 05:46:37

你没提到甲骨文的版本。

在Oracle 12上,可以使用一个新的低限制子句:

代码语言:javascript
复制
  SELECT name
  FROM emp
  ORDER BY salary desc
  FETCH FIRST 1 ROWS ONLY;

文档中有一些示例:10002.htm#BABEAACC

在早期版本中,如果不使用子查询,则无法完成此操作,但如果必须创建视图:

代码语言:javascript
复制
CREATE VIEW emp_ordered AS
SELECT *
 FROM emp
ORDER BY salary desc;

然后以这样的方式查询此视图:

代码语言:javascript
复制
SELECT * FROM emp_ordered
WHERE rownum <=1
票数 2
EN

Stack Overflow用户

发布于 2015-05-22 04:49:51

ANSI SQL应答(未指定dbms ):

代码语言:javascript
复制
select Name, Salary
from emp
order by Salary desc
fetch first 1 row only

编辑:将使用较新的甲骨文版本。

票数 1
EN

Stack Overflow用户

发布于 2015-05-22 05:46:35

Oracle 12c,中引入了顶n行限制特性。它允许在没有附加子查询的情况下对行进行排序。因此,在子查询中不再依赖ROWNUM和显式排序。

例如,

代码语言:javascript
复制
SQL> SELECT ename, sal FROM emp ORDER BY sal DESC
  2  FETCH FIRST 1 row only;

ENAME             SAL
---------- ----------
KING             5000

SQL>

更新有关重复行

有一个带有的选项,它将包括重复的行。

例如,

代码语言:javascript
复制
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>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30388551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档