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