Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我如何使用下面列出的查询来检索第三高收入者的姓名和工资?_Sql_Oracle - Fatal编程技术网

Sql 我如何使用下面列出的查询来检索第三高收入者的姓名和工资?

Sql 我如何使用下面列出的查询来检索第三高收入者的姓名和工资?,sql,oracle,Sql,Oracle,下面的示例显示了前三名员工的姓名和工资。这些员工属于员工表中的1002部门: SELECT ROWNUM, fname, salary FROM (SELECT fname, salary FROM employee WHERE dept_id=1002 ORDER BY salary DESC) WHERE ROWNUM <=3; 在上面的示例中,内联视图按工资的降序检索在部门1002工作的员工的名字和工资。外部查询的WHERE条件指定结果集只返回前三行。在内部查询中使用按薪资排序的排

下面的示例显示了前三名员工的姓名和工资。这些员工属于员工表中的1002部门:

SELECT ROWNUM, fname, salary
FROM (SELECT fname, salary
FROM employee
WHERE dept_id=1002
ORDER BY salary DESC)
WHERE ROWNUM <=3;

在上面的示例中,内联视图按工资的降序检索在部门1002工作的员工的名字和工资。外部查询的WHERE条件指定结果集只返回前三行。

在内部查询中使用按薪资排序的排名,在外部查询中只选择排名=3。

在内部查询中使用按薪资排序的排名,在外部查询中,只需选择rank=3。

这与您的基本相同,或者至少答案类似于:

是一个分析函数,可以给你一个无间隙的排名。或“高级”分析函数,以及,执行类似的操作,但对关系的处理方式不同

使用rownum/row_number,将以任意顺序返回两条具有相同薪资的记录,其“排名”不同,即,即使是平局,您也将始终拥有排名为1、2、3、4、5、6的记录

使用rank,两个具有相同薪资的记录将返回具有相同等级值的记录,并且等级值将与下一个薪资值存在差距。因此,你可能会得到排名为1、1、1、4、4、6的数据——所有三个排名为“1”的数据具有相同的薪水,而两个排名为“4”的记录具有相同的薪水。在分配相同秩的记录中,排序仍然是任意的

使用稠密_秩时,两个具有相同薪资的记录将返回相同的秩值,并且“秩”值与下一个薪资值之间不会有差距。因此,你可能会得到排名为1、1、1、2、2、3的结果——所有排名为“1”的三个记录的薪水都相同,而排名为“2”的两个记录的薪水都相同。在分配相同秩的记录中,排序仍然是任意的

对于CTE中的一些样本数据:

with t as (
    select 20000 as salary from dual
    union all select 30000 from dual
    union all select 40000 from dual
    union all select 30000 from dual
    union all select 40000 from dual
    union all select 40000 from dual
)
select salary,
    row_number() over (order by salary desc) as row_num,
    rank() over (order by salary desc) as r,
    dense_rank() over (order by salary desc) as dr
from t;

    SALARY    ROW_NUM          R         DR
---------- ---------- ---------- ----------
     40000          1          1          1
     40000          2          1          1
     40000          3          1          1
     30000          4          4          2
     30000          5          4          2
     20000          6          6          3

6 rows selected.

有了排名,你可能没有任何排名为3的东西;对于稠密等级,您可能会有多个具有该等级的等级。排号正好有一个,但如果有平局,你就不知道它是否是第三高。你需要决定哪些与你要做的匹配。

这与你的基本相同,或者至少答案类似于:

是一个分析函数,可以给你一个无间隙的排名。或“高级”分析函数,以及,执行类似的操作,但对关系的处理方式不同

使用rownum/row_number,将以任意顺序返回两条具有相同薪资的记录,其“排名”不同,即,即使是平局,您也将始终拥有排名为1、2、3、4、5、6的记录

使用rank,两个具有相同薪资的记录将返回具有相同等级值的记录,并且等级值将与下一个薪资值存在差距。因此,你可能会得到排名为1、1、1、4、4、6的数据——所有三个排名为“1”的数据具有相同的薪水,而两个排名为“4”的记录具有相同的薪水。在分配相同秩的记录中,排序仍然是任意的

使用稠密_秩时,两个具有相同薪资的记录将返回相同的秩值,并且“秩”值与下一个薪资值之间不会有差距。因此,你可能会得到排名为1、1、1、2、2、3的结果——所有排名为“1”的三个记录的薪水都相同,而排名为“2”的两个记录的薪水都相同。在分配相同秩的记录中,排序仍然是任意的

对于CTE中的一些样本数据:

with t as (
    select 20000 as salary from dual
    union all select 30000 from dual
    union all select 40000 from dual
    union all select 30000 from dual
    union all select 40000 from dual
    union all select 40000 from dual
)
select salary,
    row_number() over (order by salary desc) as row_num,
    rank() over (order by salary desc) as r,
    dense_rank() over (order by salary desc) as dr
from t;

    SALARY    ROW_NUM          R         DR
---------- ---------- ---------- ----------
     40000          1          1          1
     40000          2          1          1
     40000          3          1          1
     30000          4          4          2
     30000          5          4          2
     20000          6          6          3

6 rows selected.

有了排名,你可能没有任何排名为3的东西;对于稠密等级,您可能会有多个具有该等级的等级。排号正好有一个,但如果有平局,你就不知道它是否是第三高。您需要决定哪些匹配您正在尝试的操作。

问题是?还是你的问题?我只需要第三高收入者的名字和薪水。问题是?还是你的问题?我只需要第三高收入者的名字和薪水。