sql - 使用 rank 选择 Oracle SQL 中的前 10 个元组

标签 sql oracle

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

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

我可以通过使用 select id, name, rank() over(order by(salary) desc) as sal from instructor order by sal 对讲师进行排名

我要捕获前 10 名导师的下一步是什么?谢谢。

最佳答案

您的 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() - 将是正确的。这取决于具体的业务需求。

关于sql - 使用 rank 选择 Oracle SQL 中的前 10 个元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2335924/

相关文章:

sql - 将日期截断到会计年度

sql - jOOQ复杂更新-如何锁定表?

sql - 多对多关系 JOIN 的研究

sql - 计算Postgresql中列类型的大小

sql - 为 SQL 连接选择单个(随机)行

SQL 在顶部有一个特定记录,所有其他记录在下面

oracle - 如何在 PL/SQL 中对关联数组进行排序?

PHP动态获取Mysql数据

mysql - 如何连接表以查看具有空值的日期?

performance - 如何使用 Toad 跟踪 SQL