0

我有这些桌子(一些足球桌)

  1. 联赛:ID、名称
  2. 团队:ID、名称、IDLeague
  3. 阶段:Id、Number、IdLeague
  4. 匹配项:Id、IdStage、日期、IdTeam1、IdTeam2、Team1Score、Team2Score

我的目标是计算某个联赛的排名。

位置、团队名称、获胜、平局、失败、进球得分、进球数、积分(3 * 胜 + 平)。

如果两队得分相同,则有更多可能性(A队和B队)

  1. 如果有 A 队与 B 队的比赛,但没有 B 队与 A 队的比赛,则净胜球差 (GoalsScored - GoalsConceded ) 较大的球队处于优势
  2. 如果他们在联赛中进行了两场比赛,那么在这2场比赛中得分更多的球队是优势,如果他们在这2场比赛中获得相同数量的积分,那么在这2场比赛中净胜球更好的球队是优势有优势
  3. 如果与 2) 的差异相同,则在这 2 场直接比赛中进球多的球队处于优势
  4. 如果 3) 无法决定,联赛中净胜球大的球队获胜
  5. 如果 4) 无法决定,联赛进球多的球队获胜
  6. 如果 5) 不能决定,..我不知道 :)

联赛表:将有 3-4 行
团队表:将有 60-80 行(20 支球队/联赛) 阶段表:将有 114-152 行(38 阶段/联赛)
比赛表:将有 1149- 1520 行(10 场比赛/阶段)

  1. 是在 sql server 上为 1 个联赛进行所有聚合,还是只从该联赛中选择所有比赛并在服务器上进行所有计算?

  2. 可以用 1 选择计算该排名吗?

4

2 回答 2

1

我看到您的问题不是关于如何进行所有这些计算,而是关于在哪里进行,SQL Server 或“服务器”(我相信您的意思是,选择数据并在您的应用程序上进行计算,对吧? )

假设我理解正确,我可以告诉你,这取决于你如何实现它。SQL Server 非常擅长进行聚合计算(使用 sum 分组等),但在循环方面不是很好(例如使用游标)。

因此,如果您可以构建查询以获得结果,请在 SQL 上进行。如果您需要执行多个操作,例如“对于结果集上的每一行,运行其他查询,更新变量等(这意味着在 SQL 上使用游标),最好将结果集返回到您的应用程序并执行在那里循环。

于 2012-04-06T11:35:41.920 回答
0

我假设有联赛外的比赛。

首先,如果您有奇数支球队或下雨,并且并非所有球队都参加相同数量的比赛,那么积分不是苹果对苹果。

为什么对待 1 与 2 不同?正面交锋然后只说大多数胜利,因为这与积分相同。如果有平局,他们都获得了平局。

关于 2. in League 是多余的,就好像这是一个联赛排名,他们互相比赛然后他们就在同一个联赛中。

您可以将 1-3 替换为 1) 正面交锋 2) 正面交锋。

我的建议在哪里

0   total points
1   league points
2   head to head wins
3   head to head goals
4   league goals
5   total goals

我会把总目标放在最后,这样 A 队就没有动力在 C 队上完成目标。

我不认为这是一个选择,因为行数不同。
头对头将需要单独选择。那些是小桌子。您可以使用 Access 执行此操作。

如果有超过 2 种方式的领带,头对头可能会更复杂。您可以通过简单地不结束一个赛季来确保比赛总数相等,除非总比赛数相同。如果您要确保每支球队与另一支球队交手的次数相同,那么联赛规模必须是 2 次方(例如 16)。你必须考虑到球队退出或被停赛的可能性。确保对称时间表几乎是不可能的,因此需要有一个试图处理它的排名。在三路领带中,您可以有两个分开的,第三个将两者绑在一起。在这种情况下,该分裂的两个将获得更多的胜利 1,但不应在两个平局的情况下排名高于第三个。所以我会用 +1 赢 0 平 -1 输的决胜局点系统来修改 2。并且为了处理可能的其他不对称,我将修改 3 以头对头的目标差异总和。在这些线上使用 4 和 5 的总和目标差。

于 2012-04-06T13:38:13.297 回答