添加一个列,其值基于另一列的最大值

时间:2018-02-19 16:50:42

标签: sql postgresql

假设我有以下数据

game    name    score
A       Jon     100
A       Jon     110
A       Jen     105
B       Jen     110
B       Jon     100
B       Jon     105     

我想在数据中添加一列,其中包含每个游戏得分最高的玩家名称,而不会丢失数据中的任何行或执行联接。

game    name    score   best_player
A       Jon     100     Jon
A       Jon     110     Jon
A       Jen     105     Jon
B       Jen     115     Jen
B       Jon     100     Jen
B       Jon     105     Jen

是否有SQL查询会添加最佳播放器列而不需要任何连接?我可以使用以下查询获得最高分

select *, max(score) over(partition by game) as highscore


game    name    score   highscore
A       Jon     100     110
A       Jon     110     110
A       Jen     105     110
B       Jen     115     115
B       Jon     100     115
B       Jon     105     115

但是我不确定如何使用不会折叠数据或使用连接的分析函数将最高得分玩家的名称拉入新列。这可能吗?

2 个答案:

答案 0 :(得分:2)

这正是像mutate_if(df, is.numeric, funs({ lookup_value <- df_lookup %>% pull(quo_name(quo(.))) ifelse(is.na(.), lookup_value, .) })) 这样的窗口函数的用途。

first_value

答案 1 :(得分:2)

您想要select *, first_value(name) OVER w as highscore_name, first_value(score) OVER w AS highscore FROM mytable WINDOW w AS (partition by game ORDER BY score DESC)

first_value()