Sql sinselect前n条记录(不使用orderBy和rownum)

Sql sinselect前n条记录(不使用orderBy和rownum),sql,oracle,select,aggregate-functions,Sql,Oracle,Select,Aggregate Functions,我如何从下表中选择前三名。我知道可以通过使用ORDER by和ROWNUM的组合来实现,但我希望它以这样一种方式显示: 如果具有计数编号的ID相同,则所有具有相同计数的ID应一起显示 ID COUNT ----------- ----------------- a 4 b 2 c 3 d 2 e 1 我正在使用Sql plus最简单的方法是使用密集秩分析函数: sel

我如何从下表中选择前三名。我知道可以通过使用ORDER by和ROWNUM的组合来实现,但我希望它以这样一种方式显示: 如果具有计数编号的ID相同,则所有具有相同计数的ID应一起显示

ID          COUNT
----------- -----------------
a            4
b            2
c            3
d            2
e            1

我正在使用Sql plus

最简单的方法是使用密集秩分析函数:

select id, count
from (select t.*,
             dense_rank() over (order by count desc) as seqnum
      from t
     ) t
where seqnum <= 3

最简单的方法是使用稠密_秩分析函数:

select id, count
from (select t.*,
             dense_rank() over (order by count desc) as seqnum
      from t
     ) t
where seqnum <= 3
这里是一个通用查询

SELECT 
  * 
FROM 
  mytable a
WHERE   
  3 > ( SELECT count(1) FROM mytable b where b.count > a.count)
这里是一个通用查询

SELECT 
  * 
FROM 
  mytable a
WHERE   
  3 > ( SELECT count(1) FROM mytable b where b.count > a.count)