使用rank在Oracle SQL中选择前10个元组

时间:2010-02-25 17:02:27

标签: sql oracle

我有关系讲师(ID,姓名,部门名称,工资)。

我们的作业中的问题要求我们:使用SQL中的rank函数编写一个查询,以获得前10名收入最高的教师的ID和名称。

我可以使用select id, name, rank() over(order by(salary) desc) as sal from instructor order by sal

对教师进行排名

我抓住十大教练的下一步是什么?感谢。

2 个答案:

答案 0 :(得分:3)

你的solution接近答案,但通常最好使用RANK()函数给出的值:

select id
       , name
       , sal
from (
  select id
        , name
        , sal
        , rank() over(order by(salary) desc) as sal_rank
    from instructor
  )
where sal_rank <=10
/

rownum的问题在于它任意截断结果集。如果我们排在第十位,那么了解这一事实通常很重要。使用ROWNUM会返回单个随机记录。

有时ROWNUM - 或分析ROW_NUMBER() - 将是正确的。这取决于具体的业务要求。

答案 1 :(得分:-1)

我只是实际想出来,使用rownum ......

select id, name from(
  select id, name, rank() over(order by(salary) desc) as sal
    from instructor order by sal
  )
where rownum <=10

希望这有助于将来的某个人!