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)
该排序可以正常工作。问题是您要按顺序要求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的。
| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |