我的数据看起来像
id val
--------
1 1
2 1
3 1
4 2
5 2
6 2
7 3
8 3
9 3
我想为每个值获取两个随机选择的行的id(和值),如:
id val
--------
2 1
3 1
4 2
6 2
8 3
9 3
[编辑]
我使用MySQL v5.7
[溶液]
我终于找到了我的问题的另一个解决方案,如果我想将结果限制为每个值id
SELECT val, SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY RAND() SEPARATOR ','), ',', 2)
FROM my_table
GROUP BY val
我们的想法是按val
分组,在字符串中连接相应的id
并获取所需长度的子字符串。
答案 0 :(得分:1)
使用MySQL 8.0,您可以使用ROW_NUMBER()
:
SELECT id, val
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY val ORDER BY RAND()) AS rn
FROM tab) sub
WHERE rn <=2;
<强> DB-Fiddle.com Demo 强>
答案 1 :(得分:1)
试试这个
SELECT t.val,
@id := (SELECT t2.id FROM tbl_values t2 WHERE t2.val=t.val ORDER BY RAND() LIMIT 1) id1,
(SELECT t2.id FROM tbl_values t2 WHERE t2.val=t.val and t2.id<>@id ORDER BY RAND() LIMIT 1) id2
FROM tbl_values t
GROUP by 1
答案 2 :(得分:0)
如下:
SELECT val, MIN(id)
FROM data
GROUP BY val