Mysql 等值列的分组和限制结果

Mysql 等值列的分组和限制结果,mysql,Mysql,有这样一张桌子: | col1 | col2 | --------------- | 1 | a | | 2 | b | | 3 | a | | 4 | a | | 5 | a | | 6 | b | | 7 | a | | 8 | b | | col1 | col2 | --------------- | 3 | a | | 5 | a | | 2 | b |

有这样一张桌子:

| col1 | col2 |
---------------
|  1   |  a   |
|  2   |  b   |
|  3   |  a   |
|  4   |  a   |
|  5   |  a   |
|  6   |  b   |
|  7   |  a   |
|  8   |  b   |
| col1 | col2 |
---------------
|  3   |  a   |
|  5   |  a   |
|  2   |  b   |
|  8   |  b   |
我想随机选择包含a和b的行,但将结果限制为每个a和b两行,如下所示:

| col1 | col2 |
---------------
|  1   |  a   |
|  2   |  b   |
|  3   |  a   |
|  4   |  a   |
|  5   |  a   |
|  6   |  b   |
|  7   |  a   |
|  8   |  b   |
| col1 | col2 |
---------------
|  3   |  a   |
|  5   |  a   |
|  2   |  b   |
|  8   |  b   |

我可能遗漏了什么,但我不知道怎么做。

这就是你想要的吗

select * from yourTable where col2 = 'a' order by rand() limit 2
union all
select * from yourTable where col2 = 'b' order by rand() limit 2;
您还需要使用ORDER BY RAND:


在限制之前添加ORDER BY RAND以获得返回的随机行。类似这样的内容,但我可能也要选择c或d,我应该使用联合还是有更好的方法?@Arpi您可以使用变量,请参阅本文。如果没有太多数据,最简单的方法就是使用union。请注意,我将union改为union all以获得更好的性能,因为我们已经知道不会有重复项。我将使用union,因为它比变量简单得多。我可能最多有5个工会,这不应该是性能问题。非常感谢。