关于sql:mysql如何在排序后在每个分组中随机抽取多个数据

136次阅读

共计 599 个字符,预计需要花费 2 分钟才能阅读完成。

记录一下最近在我的项目中遇到的问题,因为我的项目的历史遗留起因,导致在数据库须要单表查问这样一组数据:生成随机考卷能够从任意题库中抉择任意题型的任意题目数量。题库为题型表中的一个字段,表构造如下

依据可用条件,题库类型,和题目数量都是未知的,因为表构造问题导致后盾须要屡次循环,为了简化一下操作选取试卷所须要的最大题目数:

首先要求随机:

select *,rand() as ndex_name from exam_radio_serv order by bank_id , ndex_name desc

减少随机字段,再排个序,排序的作用相似于分组,这段没有问题之后就简略了:

select t2.* from( select 
 @e:=case when @customer_no=t1.bank_id then @e+1 else 1 end as num,
 @customer_no:=t1.bank_id as stu_age,t1.* from
 (select id,bank_id,rand() as ndex_name from exam_radio_serv order by bank_id , ndex_name desc)t1)t2 where num<=4

总的来说就是增加了两个伪字段,对曾经排好序的数据再在后面增加一个序号字段,再取每个组中的前几条,因为排序是依据 rand()来的,所以每次排序的程序不一样,bank_id 作为前置的分组条件保障随机排序在可控范畴内

正文完
 0