SELECT 2行相同的列值

时间:2018-03-29 19:35:05

标签: 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

[编辑]

我使用MySQL v5.7

[溶液]

我终于找到了我的问题的另一个解决方案,如果我想将结果限制为每个值id

,那么它更紧凑,更有用
SELECT val, SUBSTRING_INDEX(GROUP_CONCAT(id ORDER BY RAND() SEPARATOR ','), ',', 2)
FROM my_table
GROUP BY val

我们的想法是按val分组,在字符串中连接相应的id并获取所需长度的子字符串。

3 个答案:

答案 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

db fiddle demo

答案 2 :(得分:0)

如下:

SELECT val, MIN(id)
FROM data
GROUP BY val