sql随机取n条数据 10

数据表中有id,name,tid三个字段。如果我想一次取出tid=1的随机5条记录,tid=2的随机5条记录,tid=3的随机5条记录等等。有没有一条sql语句搞定的。用... 数据表中有id,name,tid三个字段。如果我想一次取出tid=1的随机5条记录,tid=2的随机5条记录,tid=3的随机5条记录等等。有没有一条sql语句搞定的。用循环读取的话操作数据库次数太多效率低。
如果tid是n条呢,那岂不是要n-1个union?这样不好吧
展开
 我来答
百度网友9152734da
2008-12-31 · TA获得超过172个赞
知道小有建树答主
回答量:249
采纳率:0%
帮助的人:142万
展开全部
oracle 里面能实现,sqlserver里面不知道有没有分析函数
给你个参考
select *
from
(
select id,name,tid,rank()over(partition by tid order by sys_guid())rnd
from table
) t
where rnd <= 5
其中
rank()over(partition by tid order by sys_guid())
的作用是求按tid分组然后按照sys_guid(相当于sql中的newid)排序后这一行所处的名次
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2de42ee55
2008-12-31 · 超过17用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:59.4万
展开全部
select * from (select * from tablename where tid=1 order by dbms_random.value) where rownum<6
union
select * from (select * from tablename where tid=2 order by dbms_random.value) where rownum<6
union
select * from (select * from tablename where tid=3 order by dbms_random.value) where rownum<6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友dfd98da9f
2008-12-31 · 超过30用户采纳过TA的回答
知道答主
回答量:131
采纳率:0%
帮助的人:0
展开全部
可以使用union试试
测试语句如下
select top 5 id,name,tid from tablename where tid=1 order by newid()
union
select top 5 id,name,tid from tablename where tid=2 order by newid()
union
select top 5 id,name,tid from tablename where tid=3 order by newid()

参考资料: http://www.ffasp.com/morenews.asp?lm=lm2&lmid=87

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
suiyanchen
2008-12-31 · 超过56用户采纳过TA的回答
知道小有建树答主
回答量:141
采纳率:0%
帮助的人:0
展开全部
程序和数据库最优化效率考虑:
程序部分:随机5个大于1小于表记录数的数字a,b,c,d,e 。
select * from table where 记录行 in (a,b,c,d,e)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式