mysql - 使用内连接随机选择 4 行

标签 mysql sql

我的表是这样的:

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

http://sqlfiddle.com/#!9/55730/6

关于mysql - 使用内连接随机选择 4 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393422/

相关文章:

php - html 字符集在 2 个服务器上工作不同

mysql - 尝试将计数添加到不同的语句

SQL:两个没有完整列匹配的表的并集

Mysql:在另一列下方显示列的值

具有相同表子查询的 MySQL 更新

mysql - 选择特定列数据的多次出现

mysql - 更新查询不起作用

php - 如何避免在PHP中重复

PHP连接到FTP服务器

php - 从 mysql 表中检索数据时循环显示相同的图像