小组和总和分数 - 关于这个的任何想法?

时间:2012-06-21 22:21:25

标签: php mysql

我目前正在为每个游戏创建2行数据,如下所示。然后我可以创建SQL代码来生成W,L,PF,PA和diff列,如图所示。有没有人知道如何通过输入一个游戏结果来创建相同的数据?

感谢。

id | game | team1     | team2     | score1 | score2 | gameset | diff
--------------------------------------------------------------------
1  | 1    | Reagan    | Jefferson | 43     | 48     | 0       | -5      
2  | 1    | Jefferson | Reagan    | 48     | 43     | 1       |  5

-

id | team       | win | loss | PF | PA | diff
-----------------------------------------------
1  | Jefferson  | 1   | 0    | 48 | 43 |  5
2  | Reagan     | 0   | 1    | 43 | 48 | -5

SQL CODE:

$sql = 'SELECT id, team1, Sum(diff) as tdiff,
               Sum(If(score1>score2,2,0)) + Sum(If(score1=score2,1,0)) +
                   Sum(If(score1+score2=0,-1,0)) AS Pts, 
               Sum(If(score1>score2,1,0)) AS Wins, 
               Sum(If(score1<score2,1,0)) AS Losses, 
               Sum(If(score1+score2=0,-1,0)) + Sum(If(score1=score2,1,0)) AS Ties,
               Sum(score2) AS Allowed, Sum(score1) AS Scored
          FROM database
      GROUP BY team1 ORDER BY Pts DESC, Allowed ASC, Scored DESC, team1 ASC'; 

2 个答案:

答案 0 :(得分:1)

您可以使用两个查询的UNION执行此操作。但是,我不清楚结果中id列应该是什么,所以我把它排除了。赢得2分,平局1分,亏损0分是不是更常见的?你的公式似乎没有得分没有得分。 UNION指定两个分数,即“团队得分”或t_score,以及“对手得分”或o_score。它有效地为database表中的每一行创建了两行(更常规地命名为game_results - 'database'应该保留用于表的集合,而不是单个表。) / p>

SELECT team, SUM(diff) AS tdiff,
       SUM(IF(t_score > o_score, 2, 0)) +
           SUM(IF(t_score = o_score, 1, 0)) +
           SUM(IF(t_score + o_score =0, -1, 0)) AS Pts, 
       SUM(IF(t_score > o_score, 1, 0)) AS Wins, 
       SUM(IF(t_score < o_score, 1, 0)) AS Losses, 
       SUM(IF(t_score + o_score = 0, -1, 0)) +
           SUM(IF(t_score = o_score, 1, 0)) AS Ties,
       SUM(o_score) AS Allowed,
       SUM(t_score) AS Scored
  FROM (SELECT team1 AS team, game, 'H' AS home_away,
               score1 AS t_score, score2 AS o_score
          FROM database
        UNION ALL
        SELECT team2 AS team, game, 'A' AS home_away,
               score2 AS t_score, score1 AS o_score
          FROM database
       ) AS R 
  GROUP BY team ORDER BY Pts DESC, Allowed ASC, Scored DESC, team ASC; 

答案 1 :(得分:0)

这完全是我需要的乔纳森!让我走上正轨并开始工作!更新后的代码如下

SELECT团队,SUM(t_score-o_score)为tdiff,
       SUM(IF(t_score&gt; o_score,2,0))+
       SUM(IF(t_score = o_score,1,0))+
       SUM(IF(t_score + o_score = 0,-1,0))AS Pts,
       SUM(IF(t_score&gt; o_score,1,0))AS Wins,
       SUM(IF(t_score&lt; o_score,1,0))AS损失,
       SUM(IF(t_score + o_score = 0,-1,0))+
       SUM(IF(t_score = o_score,1,0))AS Ties,
       SUM(o_score)AS允许,
       SUM(t_score)AS得分
       FROM(SELECT id,diff,team1 AS team,game,'H'AS home_away,
       得分1 AS t_score,得分2 AS o_score
       来自mn_alldistrictgames
       UNION ALL
       SELECT id,diff,team2 AS团队,游戏,'A'AS home_away,
       得分2 AS t_score,得分1 AS o_score
       来自mn_alldistrictgames
       )AS R
  GROUP BY团队ORDER BY Pts DESC,允许ASC,得分DESC,ASC团队