PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać maksymalną punktację gracza z każdej grupy za pomocą SQL?

Użyj 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 na DB Fiddle :

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

Uwaga:w grupie 3 jest tylko jeden gracz (player_id 40), który nie brał udziału w żadnej grze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL 11:Co nowego

  2. Wiele niechcianych rekordów w Grupuj według klauzuli w Postgress

  3. Mac + virtualenv + pip + postgresql =Błąd:nie znaleziono pliku wykonywalnego pg_config

  4. oblicz sumę wartości powiązanych z nakładającymi się zakresami dat

  5. Utrzymywanie postgresów całkowicie w pamięci