从 table 中找出第三高的成本

Find 3rd highest cost from table

这是目录 table:

我必须从这个 table 中找到第三高的成本。

我写了这个:

 SELECT TOP 1 COST FROM CATALOG WHERE COST IN
 (SELECT DISTINCT TOP 3 COST FROM CATALOG ORDER BY COST DESC)
 ORDER BY COST ASC;

我收到这个错误:

from keyword not found where expected

如果您使用的是 Oracle 12c+,则使用 OFFSET

SELECT COST 
FROM   CATALOG 
ORDER BY COST 
OFFSET 3 ROWS FETCH NEXT 1 ROWS ONLY;

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;