显示奥运会金牌榜

下面是某届奥运会的比赛数据。

国家表Country.txt

..

运动员表Athlete.txt记录了每位运动员所属的国家:

..

比赛成绩表MatchResult.txt记录了所有的比赛结果:

..

请列出本届奥运会的金牌榜,包括各个国家的金银铜牌数量,按金牌数排序,并给出名次,注意名次要考虑并列。

只要将运动员表中的国家字段替换为国家表中的记录,再将比赛结果表中的运动员字段也替换为相应记录,比赛成绩就可以直接和国家联系起来了,而后将比赛结果按国家分组,然后就很容易统计出各个国家的金银铜牌数量了。至于三个关键字排序的名次,只要直接以它们组成的序列排序即可,而并列问题则可以使用ranks函数解决。


A

B

1

=T("Country.txt").keys(ID)

=T("Athlete.txt").keys(Athlete)

2

=T("MatchResult.txt")


3

>B1.switch(Country,A1), A2.switch(Athlete,B1)


4

=A2.groups(Athlete.Country.Country:Country;null:Ranking, count(Ranking==1):Gold, count(Ranking==2):Silver, count(Ranking==3):Bronze)

5

=A4.([Gold,Silver,Bronze]).ranks@z()

>A4.run(Ranking=A5(#))

6

=A4.sort(Ranking)


https://try.esproc.com/splx?3QB

A1读出国家表,B1读出运动员表,A2读出比赛结果表。

A3switch做外键关联,将国家表中的国家代码转换为对应的国家记录,比赛结果表中的运动员代码转换为对应的运动员记录。

A4将比赛结果表根据运动员所在国家分组汇总,预留Ranking字段作为排名,计算出每个国家的金银铜牌的数量:

..

A5取出各个国家的金银铜牌数量构成序列,用ranks@z函数计算各个国家的奖牌榜排名,计算排名时默认即可处理并列的情况。B4将排名结果填入A4

..

A6按奖牌榜名次执行排序即可

..