【发布时间】:2021-03-06 19:38:20
【问题描述】:
我需要计算每个game_id 的最佳得分手(player_id / player_name)。正如你在下面看到的,我有三种情况:
- 两个或更多人的进球数相同:在这种情况下,我们没有任何得分手。
- 一个人是唯一的进球者。
- 我们有一位得分明显最高的得分手。
我曾尝试查询每场比赛最佳得分手的game_id、player_name、player_id,但没有成功。这是我的查询:
select j.id as game_id,jg.id as player_id, jg.nome s player_name,
count(g.id) as numberOfGoals,
RANK() OVER(PARTITION BY j.id ORDER BY count(g.id) ) as rank
from jogo j
inner join jogo_jogador jj on jj.jogo_id = j.id
inner join golo g on g.jogo_jogador_id = jj.id
inner join equipa_jogador ej on ej.id = jj.equipa_jogador_id
inner join jogador jg on jg.id = ej.jogador_id
group by jg.id, jg.nome, j.id
order by j.id, jg.nome, jg.id;
这是我目前得到的:
insert into tbl(game_id player_id player_name numberofgoals rank)
values
(1 , 1 ,'Marco Costa' ,1 ,1),
(1 , 4 ,'Olivier Marques',1 ,1),
(2 , 1 ,'Marco Costa' ,1 ,1),
(3 , 9 ,'Ilidio Vatuva' ,2 ,2),
(3 ,10 ,'Joaquim Barros' ,1 ,1),
(4 ,11 ,'Diogo Mendonça' ,2 ,4),
(4 ,10 ,'Joaquim Barros' ,1 ,1),
(4 ,14 ,'John Smith' ,1 ,1),
(4 ,12 ,'Mário Jorge' ,1 ,1),
(5 , 7 ,'Ricardo Pereira',1 ,1),
(6 , 8 ,'Danilo Barbosa' ,1 ,1),
(6 , 9 ,'Ilidio Vatuva' ,1 ,1),
(6 ,19 ,'Micael Pereira' ,1 ,1),
(6 ,18 ,'Ricardo Bateiro',2 ,4),
(7 , 8 ,'Danilo Barbosa' ,3 ,1),
(9 , 8 ,'Danilo Barbosa' ,1 ,1),
(9 , 2 ,'Joao Azevedo' ,1 ,1),
(9 , 7 ,'Ricardo Pereira',1 ,1),
(10, 9 ,'Ilidio Vatuva' ,1 ,1),
(11, 3 ,'Kevin Soares' ,1 ,1),
(11, 1 ,'Marco Costa' ,1 ,1),
(11,18 ,'Ricardo Bateiro',2 ,3),
(12,21 ,'Daniel Silva' ,1 ,1),
(12, 9 ,'Ilidio Vatuva' ,1 ,1),
(13, 2 ,'Joao Azevedo' ,1 ,1);
我正在使用 PostgreSQL 13.2。
对于game_id 1(例如):
【问题讨论】:
标签: sql postgresql select greatest-n-per-group window-functions