PostgreSQL Order不起作用,它不根据该顺序返回值

Die*_*ego 0 postgresql group-by count sql-order-by

我有两名选手和比分。在玩家表上,我有两个字段,名称和ID(PK)在得分上,我有几个字段[id_score(PK),优胜者和散客是玩家ID的外键] id比赛和id匹配。

Players
 id_players |   name    
------------+-----------
         41 | Antonia
         42 | Roberto
         43 | Luis
         44 | Pedro
         45 | Fernando
         46 | Alejandra
         47 | Rene
         48 | Julieta

Scores
id_score | id_matches | winner | looser | id_tournament | round 
----------+------------+--------+--------+---------------+-------
       19 |         22 |     41 |     42 |            21 |     1
       20 |         23 |     43 |     44 |            21 |     1
       21 |         24 |     45 |     46 |            21 |     1
       22 |         25 |     47 |     48 |            21 |     1
       23 |         26 |     43 |     41 |            21 |     2
       24 |         27 |     45 |     47 |            21 |     2
       25 |         28 |     42 |     44 |            21 |     2
       26 |         29 |     48 |     46 |            21 |     2
       27 |         30 |     43 |     45 |            21 |     3
       28 |         31 |     42 |     48 |            21 |     3
       29 |         32 |     41 |     47 |            21 |     3
       30 |         33 |     46 |     44 |            21 |     3
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取一个包含以下内容的查询:
玩家ID的玩家
名称
获胜
总数

目前,我有这些查询。这样的作品。当我下订单时,没有按正确的订单退货

select p.id_players,p.name,count (s.winner) as wins, max(s.round)
from players p 
left join scores s on s.winner = p.id_players 
group by id_players, s.winner
order by s.winner desc;

 id_players |   name    | wins | max 
------------+-----------+------+-----
         41 | Antonia   |    2 |   3
         42 | Roberto   |    2 |   3
         43 | Luis      |    3 |   3
         45 | Fernando  |    2 |   2
         46 | Alejandra |    1 |   3
         47 | Rene      |    1 |   1
         48 | Julieta   |    1 |   2
         44 | Pedro     |    0 |    
Run Code Online (Sandbox Code Playgroud)

Sam*_*nen 5

该排序可以正常工作。问题是您要按顺序要求s.winner获胜者的ID。如果要根据大多数获胜顺序进行排序,则需要使用ORDER BY wins DESC,可能需要使用二级订购条款进行平局。然后,行将以获胜次数最多的玩家开始。

更具逻辑性的查询将是

SELECT s.winner, p.name, count(s.winner) as wins, max(s.round)
  FROM players p
    LEFT JOIN scores s ON s.winner = p.id_players 
  GROUP BY s.winner
  ORDER BY wins DESC;
Run Code Online (Sandbox Code Playgroud)

这样您就不需要两个GROUP BYs了,因为无论如何它们s.winner都是一样p.id_players的。