
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?这样不好吧 展开
如果tid是n条呢,那岂不是要n-1个union?这样不好吧 展开
4个回答
展开全部
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)排序后这一行所处的名次
给你个参考
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)排序后这一行所处的名次
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以使用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()
测试语句如下
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序和数据库最优化效率考虑:
程序部分:随机5个大于1小于表记录数的数字a,b,c,d,e 。
select * from table where 记录行 in (a,b,c,d,e)
程序部分:随机5个大于1小于表记录数的数字a,b,c,d,e 。
select * from table where 记录行 in (a,b,c,d,e)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询