sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan får man maksimalt scorende spiller fra hver gruppe ved hjælp af SQL?

Brug 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
 

Demo på DB Fiddle :

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

Bemærk:der er kun én spiller i gruppe 3 (player_id 40), og de deltog ikke i noget spil.



  1. Sådan opretter du en primær nøgle i SQL

  2. Tilpasset aggregatfunktion i PostgreSQL

  3. VÆLG * FRA tbl WHERE clm LIKE CONCAT('%',<anden sql-forespørgsel LIMIT 1>,'%') - HVORDAN?

  4. mysql vælg fra n sidste rækker