Sql 从表中获取薪资最高的员工的第一行

Sql 从表中获取薪资最高的员工的第一行,sql,oracle,Sql,Oracle,我正在搜索一个查询,以查找整个组织中薪酬最高的员工的详细信息。我正在使用oracledb 我尝试的查询有: select * from EMP order by SAL desc FETCH FIRST 1ROW ONLY; 错误:SQL命令未正确结束 错误:SQL命令未正确结束 错误:SQL命令未正确结束 这三种说法都有问题 试试这个: select * from EMP order by SAL desc FETCH FIRST ROW ONLY; 或使用分析函数行号: SELECT T

我正在搜索一个查询,以查找整个组织中薪酬最高的员工的详细信息。我正在使用oracledb

我尝试的查询有:

select * from EMP order by SAL desc FETCH FIRST 1ROW ONLY;
错误:SQL命令未正确结束

错误:SQL命令未正确结束

错误:SQL命令未正确结束


这三种说法都有问题

试试这个:

select * from EMP order by SAL desc FETCH FIRST ROW ONLY;
或使用分析函数
行号

SELECT T.* FROM
    (SELECT
            T.*, ROW_NUMBER() OVER(ORDER BY SAL DESC NULLS LAST) RN
        FROM EMP) T
WHERE RN = 1
干杯

您可以使用:

SELECT * 
FROM (SELECT * FROM emp ORDER BY sal DESC)
WHERE ROWNUM = 1

请注意,如果行具有可识别的薪资,
ROWNUMBER
将随机对其进行排序。要处理领带,您可以使用
RANK()
(或者根据需要使用
densed\u RANK()
):


好啊第一个最高点是5000卢比。所以,如果我在desc之后给rownum=1,那么它就工作了。但是,为了找到第二高的行,其中第2行和第3行在desc之后都是3000,那么我如何修改我的查询?@beyou:
ROWNUMBER
随机绑定记录。我用一个解决方案更新了我的答案,该解决方案使用了
RANK()
,可以正确处理领带。
SELECT T.* FROM
    (SELECT
            T.*, ROW_NUMBER() OVER(ORDER BY SAL DESC NULLS LAST) RN
        FROM EMP) T
WHERE RN = 1
SELECT * 
FROM (SELECT * FROM emp ORDER BY sal DESC)
WHERE ROWNUM = 1
SELECT * 
FROM (
    SELECT 
        e.*,
        RANK() OVER(ORDER BY sal DESC) rn
    FROM emp
)
WHERE rn = 1