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

それをすばやく行う 1 つの方法は、変数のトリックです。ウィンドウ関数を模倣するために、MySQL 固有の構文に依存しています。たとえば、タイプごとに最大 2 つのゲームを取得するには、次のようにします。

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 に答える