我已经尝试检查本网站提供的所有重复答案,但无法纠正我的错误你们可以帮我解决这个问题吗?
获取此错误
ORA-00923:未找到FROM关键字
SELECT TOP 1 sal FROM emp WHERE sal in
(SELECT DISTINCT TOP 3 sal FROM emp ORDER BY sal DESC)
ORDER BY sal ASC;
我使用oracle apex网站解决这个问题
答案 0 :(得分:2)
您似乎想要找到薪水第三低的记录。
您可以使用子查询为每个薪水分配一个分析等级,然后对其进行过滤:
select * from (
select e.*, dense_rank() over (order by sal desc) as rnk
from emp e
)
where rnk = 3;
从12c开始,你可以使用offset和fetch语法来做同样的事情:
select * from emp
order by sal desc
offset 3 rows
fetch first row only;
你需要决定如何处理关系 - 如果不止一个员工分享第三低的薪水;或者即使最低和第二低的人被授予一个以上的人。根据您想要发生的事情,您可以查看the 12c row-limiting syntax的变体以及其他分析函数 - row_number()
,dense_rank()
- 以及它们的窗口选项。
答案 1 :(得分:1)
我现在能够得到我的查询
SELECT A.* FROM emp A where 3 =(SELECT COUNT(DISTINCT sal) FROM emp B WHERE A.sal <= B.sal);
答案 2 :(得分:1)
另一种选择,使用分析函数:
WITH ranks
AS (SELECT empno, DENSE_RANK () OVER (ORDER BY sal DESC) rnk FROM emp)
SELECT e.*
FROM emp e, ranks r
WHERE e.empno = r.empno
AND r.rnk = 3;