Oracle查询分组数据中每个分组的前5条记录(用一条sql实现)

luowenjie848 2010-08-20 05:31:20
例如 表zoon中的animal字段里有“tiger”,“monkey”,“elenphant”等等200多种,我需要查出每种动物的各5条记录
结果显示为:
animal age id
tiger 10 1
tiger 11 2
..
monkey 10 12
monkey 10 13
...
elephant 10 20
elephant 11 21
..
等等200多种都各显示5条

请问要如何实现
...全文
2006 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
luowenjie848 2010-09-19
  • 打赏
  • 举报
回复
最近有点事不在,不好意思啊,谢谢1楼的答案
gelyon 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 easyroom 的回复:]
首先强烈建议你不要试图用1个sql干这件事。

因为sql返回肯定是一个list
后续还要遍历list把他们按照类型拆分

sql的话呢 就是select * from zoon where animal='xxx1' union select * from zoon where animal='xxx2' union 。。。
这个xxx要先用distinct查出来,然后拼这个大sql……
[/Quote]

疑惑中。。。。
minitoy 2010-08-20
  • 打赏
  • 举报
回复
速度都好快。。
楼主学习下分析函数,你会发现很强大
easyroom 2010-08-20
  • 打赏
  • 举报
回复
首先强烈建议你不要试图用1个sql干这件事。

因为sql返回肯定是一个list
后续还要遍历list把他们按照类型拆分

sql的话呢 就是select * from zoon where animal='xxx1' union select * from zoon where animal='xxx2' union 。。。
这个xxx要先用distinct查出来,然后拼这个大sql。


duqiangcise 2010-08-20
  • 打赏
  • 举报
回复
1楼领先了!来迟一步!
duqiangcise 2010-08-20
  • 打赏
  • 举报
回复
select * from
(
select animal,age,id ,row_number()over(partition by animal order by age desc) row_num
from zoon
)where row_num <=5;

显示出了每种动物中年龄最大的前5种animal。
Phoenix_99 2010-08-20
  • 打赏
  • 举报
回复
select animal,age,id,total from(
select animal,age,id,row_number() over(partition by animal order by id) total from zoon
) rn <= 5


没有验证,思路是这样

3,495

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧