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

SQLを使用して各グループから最大スコアプレーヤーを取得するにはどうすればよいですか?

    row_number()を使用します :

    select group_id, player_id
    from (
        select
            p.*,
            row_number() over(
                partition by p.group_id 
                order by case 
                    when m.first_player = p.player_id then m.first_score 
                    else m.second_score 
                end desc,
                player_id
            ) rn
        from players p
        inner join matches m
            on m.first_player = p.player_id or m.second_player = p.player_id
    ) x
    where rn = 1
    

    DBフィドルのデモ

    | group_id | player_id |
    | -------- | --------- |
    | 1        | 65        |
    | 2        | 20        |
    

    注:グループ3(player_id 40)にはプレーヤーが1人しかいないため、ゲームには参加していません。



    1. PostgreSQL-復元されたデータベースが元のサイズよりも小さい

    2. com.mysql.jdbc.Driverをロードできません

    3. Hibernateuuid生成とmysqluuid関数uuid()

    4. SSIS-データが失われる可能性があるため、値を変換できません