当前位置: 首页 > 面试题库 >

ORACLE SQL查询以获取前3名薪水rownum大于

何修能
2023-03-14
问题内容

我想写一个查询以显示获得最高3薪水的员工

  SELECT *
    FROM (SELECT salary, first_name
            FROM employees
        ORDER BY salary desc)
   WHERE rownum <= 3;

但是我不明白如何为嵌套查询计算该rownum是否可以正常工作,或者如果遇到问题,请您让我理解:

SELECT *
  FROM (SELECT salary, first_name 
          FROM employees
      ORDER BY salary )
 WHERE rownum >= 3;

我经历了此链接Oracle / SQL:为什么查询“ SELECT * FROM records where rownum> = 5 AND rownum
<= 10”-返回零行
,但它再次指向链接,但没有给出答案


问题答案:

a_horse_with_no_name的答案是一个很好的答案, 但是只是为了让您了解为什么您是第一个查询而第二个却不行:

当您使用子查询时,Oracle不会 神奇地 使用 子查询 的rownum
,它只会获取有序的数据,因此它会相应地提供rownum,符合条件的第一行仍将获得rownum
1,依此类推。这就是为什么您的第二个查询仍然不返回任何行的原因。

如果要限制起始行,则需要保留子查询的rownum,即:

SELECT *
FROM (SELECT * , rownum rn
  FROM (SELECT salary, first_name
          FROM employees
      ORDER BY salary ) )sq
WHERE sq.rn >= 3;

但是正如a_horse_with_no_name所说的,还有更好的选择…

编辑: 为了使事情更清楚,请看以下查询:

with t as (
select 'a' aa, 4 sal from dual
union all
select 'b' aa, 1 sal from dual
union all
select 'c' aa, 5 sal from dual
union all
select 'd' aa, 3 sal from dual
union all
select 'e' aa, 2 sal from dual
order by aa
)
select sub.*, rownum main_rn 
  from (select t.*, rownum sub_rn from t order by sal) sub 
 where rownum < 4

请注意子行编号和主行编号之间的区别,请参阅哪一个用于标准



 类似资料:
  • 问题内容: 如何使用“ rownum”关键字从任何表中检索第三行(我使用的是oracle-10g) 问题答案: 当查询产生行时,Oracle将按顺序为ROWNUM赋值-因此,获取的第一行获取ROWNUM = 1,获取的第二行获取ROWNUM = 2,获取的第三行获取ROWNUM = 3,依此类推。注意-对于一行要被分配ROWNUM = 3,必须获取前两行。这就是为什么您的查询不返回任何行的原因。您

  • 问题内容: 我有一个学生列表: 我想随机获得总计5名学生3名A科学生和2名B科学生 完成一次“建议简单的SQL查询” 示例:我想随机合并以下查询 问题答案: 您非常接近: 子查询用于获取每个年级的随机学生。外部将五个学生随机分组。 注意:这是完成所需内容的最简单方法。如果表的大小适中,而性能是一个问题,则可以选择其他解决方案。

  • 问题内容: 我指的是以下查询,以找到雇员的Nth最高薪水。 一位先生说,此查询有效。有人可以解释一下如何将COUNT(n等于1到X,其中X是不同工资总额)的值等于&n会产生这个结果吗? 我试图了解数据库如何在内部处理此查询并产生结果? 谢谢你。 问题答案: 首先,查询将返回 最低 薪水值。要返回最高薪水值,您必须更改为。 接下来,此查询的工作方式是:首先找到一个唯一的薪水值列表作为一个派生表,然后

  • 问题内容: 我想将所有mysql表的col名称放入php数组中吗? 是否对此有疑问? 问题答案: 最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。特别是INFORMATION_SCHEMA.COLUMNS表… 它非常强大,可以为您提供大量信息,而无需解析文本(例如列类型,列是否可为空,最大列大小,字符集等)… 哦,这是标准的SQL(这是MySQL的特定扩展名)… 有关表之间的

  • 本文向大家介绍oracle中利用关键字rownum查询前20名员工信息及rownum用法,包括了oracle中利用关键字rownum查询前20名员工信息及rownum用法的使用技巧和注意事项,需要的朋友参考一下 注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据  例:查询工资前20名的员工姓名,工资 ,工资由高到低 如果直接按如下查询得下图结果

  • 如何获得最大截面。Id位于下面的文档中,其中包含集合_id=一些参数 我在下面试过了 但是,它不是返回max int单个值,而是返回一个包含部分数组中所有Ids的数组。 在节点中执行时,进一步执行相同的查询。js它返回一个空数组。