从mysql中给定的类别中获取单个随机记录

uplii1fm  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(354)

我的数据库中有一个表叫做 mcq-quiz 有2000条记录:

id  question    category
1   q1  c1
2   q2  c1
3   q3  c1
4   q4  c2
5   q5  c2
6   q6  c3
7   q7  c3
8   q8  c4
9   q9  c4
10  q10 c5

我想要一张特定类别的唱片。。。但记录应该是随机的。
我尝试了以下查询:

SELECT id, question, category  FROM `mcq_quiz` where category in(c1,c2,c3,c4,c5) group by category

它做得很好,但每次都检索相同的记录。但我每次都想要一张新的随机记录。
我也试过 rand() 函数,它每次检索相同的记录,但更改顺序。但每次我都需要一个随机记录。

3mpgtkmj

3mpgtkmj1#

这是每个组最大n个问题的一个变体,在这里,每个组需要一个随机记录。
可以使用子查询进行筛选:

select q.*
from mcq_quiz q
where category in(c1, c2, c3, c4, c5) and q.id = (
    select q1.id
    from mcq_quiz q1
    where q1.category = q.category
    order by rand()
    limit 1
)

当然,如果您运行的是mysql 8.0,则可以使用窗口函数:

select *
from (
    select q.*, row_number() over(partition by category order by rand()) rn
    from mcq_quiz q
    where category in(c1, c2, c3, c4, c5)
) q
where rn = 1

相关问题