来自oracle apex网站的关键字错误

时间:2017-12-28 09:25:48

标签: sql oracle

我已经尝试检查本网站提供的所有重复答案,但无法纠正我的错误你们可以帮我解决这个问题吗?

获取此错误

  

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网站解决这个问题

3 个答案:

答案 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;