从每个国家的顶部进行选择和排序

时间:2019-08-25 17:52:51

标签: sql sql-server

我正在为每个国家/地区有2个人的比赛打分,但只有一个国家/地区的顶尖选手获得积分。如果一个国家获得第一名和第二名,则第二名将下降,第三名将上升至第二名。 数据:

library(purrr)
library(dplyr)
map_df(z, as.data.frame) %>%
    mutate_all(replace_na, 0)

我尝试使用以下几种方法:ROW_NUMBER()OVER(PARTITION BY

competitorid    wristbandid countryname eventid place
14905           8           Australia       100 1
14923           26          New Zealand     100 2
14910           13          Australia       100 3
14922           25          New Zealand     100 4
14926           29          South Africa    100 5
14939           42          Great Britain   100 6
14901           4           United States   100 7
14914           17          Japan           100 8
14903           6           United States   100 9
14940           43          Great Britain   100 10
14933           36          Canada          100 11
14929           32          South Africa    100 12
14917           20          Japan           100 13
14934           37          Canada          100 14

我知道这是错误的,而且我并不仅从每个国家获得顶级运动员。

1 个答案:

答案 0 :(得分:2)

我相信您也需要按事件ID进行分区。像这样:

SELECT competitorid
    , wristbandid
    , countryname
    , eventid
    , place
    , RANK() OVER(PARTITION BY countryname, eventid, order by place DESC) AS RNK
FROM competitormainviewpoints2021isrc