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

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

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

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

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

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

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

3mpgtkmj

3mpgtkmj1#

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

  1. select q.*
  2. from mcq_quiz q
  3. where category in(c1, c2, c3, c4, c5) and q.id = (
  4. select q1.id
  5. from mcq_quiz q1
  6. where q1.category = q.category
  7. order by rand()
  8. limit 1
  9. )

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

  1. select *
  2. from (
  3. select q.*, row_number() over(partition by category order by rand()) rn
  4. from mcq_quiz q
  5. where category in(c1, c2, c3, c4, c5)
  6. ) q
  7. where rn = 1
展开查看全部

相关问题