MySQL从列表中选择x个记录的数量
问题描述:
可能是有史以来最差的标题。我有3列MySQL从列表中选择x个记录的数量
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
但是这不是真的可能,因为这只是一个简单的例子,在真正的代码中,我有更多的列来选择和执行连接,如果我这样做,它将是可怕的不可维护的。有什么建议么?
答
这是一个使用变量的方法。据推测,你想每个类型的随机记录:
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;
这似乎工作,但我真的可以受益,如果你能解释它背后的想法,因为它看起来对我来说太复杂了。 – 2015-02-08 16:37:27
是啊,使用这个,没有人会理解你的SQL或可以修复错误。 :O – Umingo 2015-02-08 22:10:59