从 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;
这是目录 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;