【发布时间】:2016-12-11 04:11:55
【问题描述】:
我想做一个奥运奖牌排名。 现在我有一个包含 CountryID、MatchID 和 Medal 列的数据透视表。 奖牌列存储值 1(金)、2(银)和 3(黄铜)。
金牌最多的国家应该是排名最高的国家,其次是银牌最多的国家,等等。唯一的问题是,当金牌相等时,应该考虑银牌的数量,当然如果也相等则比较铜牌。
现在我采用以下(不成功)方法: 首先,我做了 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 枚金牌,而且他们都获得了银牌,那么这两个国家在榜单中的记录又是另一个记录。
如何通过我的数据库设置获得符合奥林匹克标准的排名?
我要创建的结果是:
[排名 1] CountryID = 2,numberofGold = 10,numberofSilver = 3,numberOfBrass = 5
[排名 2] CountryID = 3,numberofGold = 10,numberofSilver = 9,numberOfBrass = 9
[排名 3] CountryID = 4,numberofGold = 9,numberofSilver = 10,numberOfBrass = 10
....
提前致谢!
【问题讨论】:
-
已经是数据透视表了
-
评价可以根据得分金:银:铜=5:3:1(加权排名),评价en.wikipedia.org/wiki/Olympic_medal_table
-
哇好,不知道这样工作!拯救了我的一天! :)
-
欢迎。很高兴解决问题。