我想获得奥运会奖牌排名。 现在我有一个包含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
....
提前致谢!
答案 0 :(得分:1)