什么样的查询创建奥运排名(金>银>黄铜)?

时间:2016-08-04 21:11:07

标签: c# mysql asp.net linq

我想获得奥运会奖牌排名。 现在我有一个包含CountryID,MatchID和Medal列的数据透视表。 奖牌列存储值1(金色),2(银色)和三个(黄铜色)。

金牌最多的国家应该是排名最高的国家,其次是银牌最多等等。唯一的事情就是,当金牌相等时,银牌的数量应该考虑在内,如果相等则比较铜牌。

现在我采取以下(不成功)方法: 首先,我进行3次这样的查询,以了解每个国家/地区的奖牌数量:

var resGold = context.olympics_landen_wedstrijd.Where(n => n.medal ==   1).GroupBy(n => n.LandID).Select(g => new { g.Key, Count = g.Count(), Medal = 2 }).OrderByDescending(n => n.Count); 

然后我将resGold,resSilver和resBrass合并到一个列表中。我再次查询该列表,以获得排名较高的国家排名较高的排名。

var list = all.OrderBy(t => t.Medal == 1 ? 1 : (t.Medal == 2 ? 2 : t.Medal == 3 ? 3 : 4)).ToList();

问题是我最终得到一个列表,其中国家的排名超过一次。当德国和美国都获得10枚金牌并且他们两枚都获得了银牌时,这两个国家的名单还有另一项记录。

如何通过我的数据库设置根据奥林匹克标准获得排名?

我想要创建的结果是:

[RANK 1] CountryID = 2,numberofGold = 10,numberofSilver = 3,numberOfBrass = 5
[RANK 2] CountryID = 3,numberofGold = 10,numberofSilver = 9,numberOfBrass = 9
[RANK 3] CountryID = 4,numberofGold = 9,numberofSilver = 10,numberOfBrass = 10
....

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以根据加权等级计算每个国家/地区的得分。

比率可以是金:银:bronz = 5:3:1

您可以根据得分描述对国家/地区进行排序

评论

Olympic medal table