显示奥运会金牌榜
下面是某届奥运会的比赛数据。
国家表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读出比赛结果表。
A3用switch做外键关联,将国家表中的国家代码转换为对应的国家记录,比赛结果表中的运动员代码转换为对应的运动员记录。
A4将比赛结果表根据运动员所在国家分组汇总,预留Ranking字段作为排名,计算出每个国家的金银铜牌的数量:
A5取出各个国家的金银铜牌数量构成序列,用ranks@z函数计算各个国家的奖牌榜排名,计算排名时默认即可处理并列的情况。B4将排名结果填入A4:
A6按奖牌榜名次执行排序即可:
Country.txt
Athlete.txt
MatchResult.txt
跟着练习一下 pivot@s 和 pjoin…
英文版