MySQL逐列选择x条记录

时间:2015-02-08 16:25:11

标签: mysql

可能是有史以来最差的冠军。我所拥有的是一个3列的表

id | name | type
1  | John | 1
2  | Sam  | 1
3  | Bob  | 2
4  | Joe  | 2
5  | Al   | 3
6  | Paul | 3

我需要选择3个不同类型的随机人

有效输出

id | name | type
1  | John | 1
3  | Bob  | 2
6  | Paul | 3

无效输出

id | name | type
3  | Bob  | 2
5  | Al   | 3
6  | Paul | 3

我认为我能做的是

SELECT id, name, type FROM table WHERE type = 1
UNION
SELECT id, name, type FROM table WHERE type = 2
UNION
SELECT id, name, type FROM table WHERE type = 3

但这实际上是不可能的,因为这只是一个简化的例子,在实际代码中我有更多的列来选择和执行连接,如果我这样做,那将是非常难以维护的。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

这是一个使用变量的方法。据推测,您需要每种类型的随机记录:

select id, name, type
from (select t.*,
             (@rn := if(@t = type, @rn + 1,
                        if(@t := type, 1, 1)
                       )
             ) as seqnum
      from table t cross join
           (select @t := 0, @rn := 0) vars
      order by type, rand()
     ) t
where seqnum = 1;

答案 1 :(得分:1)

为什么不尝试使用group by。

 select id,name,type from table group by type order by rand() limit 0,XXX