0

我想为每种游戏类型从我的表“游戏”中选择 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
4

1 回答 1

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

SQL Fiddle 上的实时示例。

于 2013-02-13T09:07:55.640 回答