php/mysql-计数和分组

php/mysql-计数和分组,php,mysql,count,case,Php,Mysql,Count,Case,我有一个数据库,里面有玩过的游戏和他们的分数。现在,我想运行一个查询,统计每个球队总进球数超过x(主客场合计)的所有结果 数据库结构: +----------+----------+---------------+---------------+ | HomeTeam | AwayTeam | HomeTeamGoals | AwayTeamGoals | +----------+----------+---------------+---------------+ | team1 | t

我有一个数据库,里面有玩过的游戏和他们的分数。现在,我想运行一个查询,统计每个球队总进球数超过x(主客场合计)的所有结果

数据库结构:

+----------+----------+---------------+---------------+
| HomeTeam | AwayTeam | HomeTeamGoals | AwayTeamGoals |
+----------+----------+---------------+---------------+
| team1    | team2    |             3 |             1 |
| team3    | team4    |             1 |             2 |
| team1    | team3    |             4 |             4 |
| team4    | team2    |             0 |             1 |
+----------+----------+---------------+---------------+
想要的结果:

+-------+----------+--------------------+
| team  | played   |  games > 3.5 goals |
+-------+----------+--------------------+
| team1 |        2 |                  2 |
| team2 |        2 |                  1 |
| team3 |        2 |                  1 |
| team4 |        2 |                  0 |
+-------+----------+--------------------+
我在看这样的东西:

SELECT *, COUNT(*) AS total FROM games WHERE homeTeamGoals + awayTeamGoals > 3.5 GROUP BY homeTeam
但这只适用于主场比赛,因此我需要一种方法将客场比赛也添加到此中。

  • 分别以
    HomeTeam
    AwayTeam
    的形式获取团队的结果
  • 使用
  • 将结果用作参考
  • 根据衍生表中的
    团队进行分组,以获得结果
请尝试以下操作():


team4
的预期结果错误。
team4
的任何对手的总目标都不超过3.5。第4队(与第3队)的一场比赛的总目标为3,而另一场(与第2队)的总目标为1,效果完美:)谢谢!同时阅读union all和派生表!
SELECT derived_t.team, 
       SUM(derived_t.played) AS played, 
       SUM(derived_t.games)  AS 'games > 3.5 goals'
FROM 
(
  SELECT t1.HomeTeam as team, 
         COUNT(*) AS played, 
         SUM( IF(t1.HomeTeamGoals + t1.AwayTeamGoals > 3.5, 1, 0) ) AS games  
  FROM your_table AS t1 
  GROUP BY t1.HomeTeam

  UNION ALL 

  SELECT t1.AwayTeam as team, 
         COUNT(*) AS played, 
         SUM( IF(t1.HomeTeamGoals + t1.AwayTeamGoals > 3.5, 1, 0) ) AS games  
  FROM your_table AS t1 
  GROUP BY t1.AwayTeam
) AS derived_t
GROUP BY derived_t.team