这是目录表:
我必须从这张表中找到第三高的成本。
我写了这个:
SELECT TOP 1 COST FROM CATALOG WHERE COST IN
(SELECT DISTINCT TOP 3 COST FROM CATALOG ORDER BY COST DESC)
ORDER BY COST ASC;
我收到了这个错误:
未找到预期的关键字
答案 0 :(得分:1)
Oracle无法识别TOP
。您可以执行您想要的操作,但它需要额外的子查询(除非您使用的是Oracle 12c +):
SELECT MIN(COST)
FROM CATALOG
WHERE COST IN (SELECT COST
FROM (SELECT DISTINCT COST
FROM CATALOG
ORDER BY COST DESC
) c
WHERE rownum <= 3
);
注意:尽管可能很诱人,但您不能在子查询中使用WHERE rownum = 3
。您可以查看文档以获取解释,但基本上rownum
不会增加,直到在结果集中放置一行。因此,rownum = 1
总是需要在结果集中。
最后,在任何(合理的)数据库中执行此操作的常规方法是使用dense_rank()
:
select c.*
from (select c.*, dense_rank() over (order by cost desc) as seqnum
from category c
) c
where seqnum = 3;
答案 1 :(得分:0)
如果您使用的是Oracle 12c +,请使用OFFSET
SELECT COST
FROM CATALOG
ORDER BY COST
OFFSET 3 ROWS FETCH NEXT 1 ROWS ONLY;