我的表是这样的:
test_ques
------------------------------
id | ques | skill_id
1 | xyz | 1
2 | xyz | 1
3 | xyz | 1
4 | xyz | 1
5 | xyz | 1
6 | xyz | 2
7 | xyz | 2
8 | xyz | 2
9 | xyz | 2
10 | xyz | 2
11 | xyz | 2
12 | xyz | 3
13 | xyz | 3
14 | xyz | 3
15 | xyz | 3
16 | xyz | 3
17 | xyz | 3
skills
------------
id | score
1 | 15
2 | 20
3 | 25
我想从表 test_ques 中随机选择每个 Skill_id 的 4 行
我想知道如何执行上述操作并使用内连接从技能表中获取分数。
最佳答案
您可以使用按 RAND()
排序的 GROUP_CONCAT()
将每个技能 ID 的 ID 存储在字符串中。然后使用 FIND_IN_SET() 将子查询与选择前 4 个的表连接起来。
select q.*
from (
select skill_id, group_concat(id order by rand()) as ids
from test_ques
group by skill_id
) sub
join test_ques q
on q.skill_id = sub.skill_id
and find_in_set(q.id, sub.ids) <= 4
关于mysql - 使用内连接随机选择 4 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393422/