如果某些行具有相同的值,是否可以使用 ROWNUM SELECT 来自数据库的前 N ​​行?

Is it possible to SELECT N first rows from database using ROWNUM if some rows have the same value?

我正在尝试 select 使用 ROWNUM 从数据库中获取前 N 行。问题是,如果我想 select 6 个年龄的第一个值和这个年龄的人的名字,并且其中一些具有相同的年龄值,则不会显示每个人。 例如

name       age
Peter       15
Mark        22
Kelly       17
Mike        17
George      17

如果我想显示具有 2 个最大年龄值的人,ROWNUM 将显示 Mark 和 Kelly 或 Mike 或 George。不是他们三个。预期结果是:

Name        age
Mark         22
Kelly        17
Mike         17
George       17

是否可以使用 ROWNUM 得到这个结果?不是 RANK、DENSE_RANK、JOIN、相关子查询而是 ROWNUM?

您可以尝试这样的操作:

select *
from test
where age in (
                select age
                from ( 
                        select age
                        from test
                        group by age
                        order by age desc
                      )
                where rownum <=2
              ) 

正确的解决方案 dense_rank(),但您可以仅使用 row_number() 和一些子查询来实现:

select t.*
from t
where t.age in (select age
                from (select age
                      from t t2
                      order by age desc
                     ) x
                where rownum <= 2
               );

在 Oracle 12+ 中,你可以简化这个:

select t.*
from t
where t.age in (select age
                from t t2
                order by age desc
                fetch first 2 rows only
               );