sql >> データベース >  >> RDS >> Mysql

単一のテーブル内の各カテゴリのmysqlSELECTベスト

    これを試してください:

    SELECT gamers.*
    FROM gamers
    INNER JOIN 
     (SELECT 
       max(score) as maxscore, 
       gameid from gamers
       GROUP BY gameid) AS b
    ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) ;
    ORDER BY score DESC, gameid;
    

    これにより、次のように出力されます:

    +---------+--------+-------+
    | gamerid | gameid | score |
    +---------+--------+-------+
    |       4 |      1 |    90 |
    |       5 |      2 |    40 |
    |       8 |      3 |    30 |
    +---------+--------+-------+
    3 rows in set (0.00 sec)
    

    実行できる他のオプションは、一時テーブルまたはビューを作成することです(サブクエリが気に入らない場合)。

    create temporary table games_score (
     SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid
    );
    

    次に:

    SELECT gamers.* 
    FROM gamers 
    INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) 
    ORDER BY score DESC, gameid;
    

    またはビュー:

    create or replace view games_score AS 
    SELECT max(score) as maxscore, gameid FROM gamers GROUP BY gameid;
    

    次に:

    SELECT gamers.* 
    FROM gamers 
    INNER JOIN games_score AS b ON (b.gameid = gamers.gameid AND b.maxscore=gamers.score) 
    ORDER BY score DESC, gameid;
    


    1. MySQL GREATEST()関数–引数のリストから最大の引数を検索します

    2. ON条件なしでmysqlJOINを使用するにはどうすればよいですか?

    3. 空の値を整数フィールドとして保存する方法

    4. OracleDatabaseからMariaDBへの移行-知っておくべきこと