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

记录一下最近在项目中遇到的问题,由于项目的历史遗留原因,导致在数据库需要单表查询这样一组数据:生成随机考卷可以从任意题库中选择任意题型的任意题目数量。题库为题型表中的一个字段,表结构如下
mysql如何在排序后在每个分组中随机抽取多个数据_第1张图片
根据可用条件,题库类型,和题目数量都是未知的,由于表结构问题导致后台需要多次循环,为了简化一下操作选取试卷所需要的最大题目数:

首先要求随机:

select *,rand() as ndex_name from exam_radio_serv order by bank_id , ndex_name desc
mysql如何在排序后在每个分组中随机抽取多个数据_第2张图片
增加随机字段,再排个序,排序的作用类似于分组,这段没有问题之后就简单了:

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

mysql如何在排序后在每个分组中随机抽取多个数据_第3张图片

总的来说就是添加了两个伪字段,对已经排好序的数据再在前面添加一个序号字段,再取每个组中的前几条,由于排序是根据rand()来的,所以每次排序的顺序不一样,bank_id作为前置的分组条件保证随机排序在可控范围内

你可能感兴趣的:(sql,mysql)