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个工会,这不应该是性能问题。非常感谢。