我的数据看起来像是
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
溶液
我终于找到了另一个解决我的问题的方法,它更紧凑,更有用,例如,我想将结果限制在25 id /值。
SELECT val, SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY RAND() SEPARATOR ','), ',', 2)
FROM my_table
GROUP BY val其思想是按val分组,将相应的id连接在一个字符串中,并取一个所需长度的子字符串。
发布于 2018-03-29 21:13:30
尝尝这个
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发布于 2018-03-29 19:51:15
使用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;发布于 2018-03-29 19:41:17
不如这样吧:
SELECT val, MIN(id)
FROM data
GROUP BY valhttps://stackoverflow.com/questions/49563773
复制相似问题