sql - 从每种类型中选择金额

时间:2013-02-13 08:59:58

标签: mysql sql resources

我想从我的桌子“游戏”中为每种游戏类型选择10个名字。

例如:10个RPG游戏,10个动作游戏,10个MMO游戏......

问题是我的查询需要占用大量资源,我想知道是否有人想以更好的方式编写此查询:

SELECT name
FROM games AS thisgame
WHERE (SELECT COUNT(1)
       FROM games
       WHERE games.game_id = thisgame.game_id 
             AND games.type > thisgame.type) <= 9

1 个答案:

答案 0 :(得分:2)

快速做到这一点的一种方法是变量技巧。它依赖于MySQL特定的语法来模仿窗口函数。例如,每种类型最多可以检索两个游戏:

select  s.name
,       s.type
from    (
        select  *
        ,       (@rn := if(@cur=type, @rn+1, 1)) as rn
        ,       @cur := type
        from    Games
        join    (select @cur := '') i
        order by
                type
        ) s
where   rn <= 2

Live example at SQL Fiddle.