假设我有以下数据
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
但是我不确定如何使用不会折叠数据或使用连接的分析函数将最高得分玩家的名称拉入新列。这可能吗?
答案 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()