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吗?