Mysql 选择具有相同列值的两行
我有数据看起来像Mysql 选择具有相同列值的两行,mysql,Mysql,我有数据看起来像 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 SELECT val, MIN(id) FROM data GROUP BY val [编辑] 我使用MySQL v5.7 [解决方案] 我
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
SELECT val, MIN(id)
FROM data
GROUP BY val
[编辑]
我使用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串接在一个字符串中,并获取所需长度的子字符串。类似于:
id val
--------
2 1
3 1
4 2
6 2
8 3
9 3
SELECT val, MIN(id)
FROM data
GROUP BY val
在MySQL 8.0中,您可以使用行号: 试试这个
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
它只返回每个值的最小id。您真的需要一个随机id,而不是任意id吗?