【问题标题】:What kind of query creates an olympic ranking (gold > silver > brass)?什么样的查询会创建奥运排名(金牌 > 银牌 > 铜牌)?
【发布时间】: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
  • 哇好,不知道这样工作!拯救了我的一天! :)
  • 欢迎。很高兴解决问题。

标签: c# mysql asp.net linq


【解决方案1】:

您可以根据加权排名计算每个国家/地区的分数。

比例可以是金:银:青铜= 5:3:1

您可以根据分数 Desc 对国家/地区进行排序

回顾

Olympic medal table

【讨论】:

  • 我不得不与那个解决方案争论。数学上听起来不错。但是,在计算奥运会奖牌排名时,在编制奥运会排名时,通常排名不是加权的,而是基于奖牌的绝对优先级。我的意思是:如果A国有5金4银1铜,B国有6金1银0铜,C有1金22银10铜,那么加权顺序是:A, C、B 但是,我称之为“奖牌的绝对优先级”的顺序是:B、A、C。这更常用。这个网站说明了我的观点:olympicmedalrankings.com
猜你喜欢
  • 1970-01-01
  • 2012-08-07
  • 2020-05-22
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 2012-08-25
相关资源
最近更新 更多