计算SQL Server或Web服务器上的聚合?

时间:2012-04-06 09:22:22

标签: .net sql-server-2008 tsql

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

  1. 联赛:Id,姓名
  2. 团队:Id,Name,IdLeague
  3. 阶段:Id,Number,IdLeague
  4. 匹配:Id,IdStage,日期,IdTeam1,IdTeam2,Team1Score,Team2Score
  5. 我的目标是计算一些联赛的排名。

    位置,队名,胜利,平局,失败,进球,进球,点数(3 * WI +抽签)。

    如果两支队伍的分数相同,则可能性更高(A队和B队)

    1. 如果有一支A队与A队的比赛,但没有比赛队B队对阵A队,那么队友队的进球差距更大(GoalsScored - GoalsConceded)则优势明显
    2. 如果他们在联赛中互相比赛两场比赛,那么在这两场比赛中得分更多的球队就有优势,如果他们在这两场比赛中获得相同数量的积分,那么那些球队在这两场比赛中有更好的净胜球2场比赛它的优势
    3. 如果与2)的差异相同,那么在这两个直接比赛中得分较多的球队就会有优势
    4. 如果3)无法决定,在联赛中有更好的球门差异的球队获胜
    5. 如果4)无法决定,那么在联赛中有更多进球的球队将获胜
    6. 如果5)无法决定,..我不知道:)。
    7. 联赛表:将有3-4行
      球队表:将有60-80排(20支球队/联赛) 阶段表:将有114-152行(38个阶段/联盟)
      匹配表:将有1149-1520行(10个匹配/阶段)

      1. 最好是在sql server上为1个联盟制作所有聚合,还是只选择该联盟中的所有匹配并在服务器上进行所有计算?

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

我认为没有联赛比赛。

首先,如果你有一个奇数的球队或下雨,而且并非所有球队都玩同样数量的比赛,那么积分就不是苹果。

为什么治疗1不同于2?然后只是说大多数胜利,因为这与积分相同。如果有平局他们都得到平局。

On 2.在联赛中是多余的,好像是联赛排名,他们互相比赛,然后他们在同一个联盟。

你可以用1)替换1-3替换胜利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。