sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat maximální skóre hráče z každé skupiny pomocí SQL?

Použijte 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

Ukázka na DB Fiddle :

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

Poznámka:Ve skupině 3 je pouze jeden hráč (player_id 40), který se nezúčastnil žádné hry.



  1. Jak přirozeně spojit dva dotazy s klauzulí?

  2. MySQL nemůže zrušit index potřebný v omezení cizího klíče

  3. Přidání obrázku do databáze v Javě

  4. Poloměr/nejbližší výsledky – Google Maps API