sinselect前n条记录(除了使用orderBy和rownum)

时间:2013-07-19 15:33:57

标签: sql oracle select aggregate-functions

如何从下表中选择前3位数。我知道可以使用ORDER BYROWNUM的组合来完成,但我希望它能够以下列方式显示:
如果带有计数的ID相同,则所有具有相同计数的ID应一起显示

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

我正在使用Sql plus

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用dense_rank()分析函数:

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

答案 1 :(得分:0)

这是一个通用查询

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