【问题标题】:php/mysql - counting and groupingphp/mysql - 计数和分组
【发布时间】:2018-09-29 10:37:44
【问题描述】:

我有一个包含已玩游戏及其得分的数据库。现在我想运行一个查询,计算每支总进球数超过 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

但这仅适用于主场比赛,所以我需要一种方法来添加客场比赛。

【问题讨论】:

  • team4 的预期结果错误。没有匹配 team4 的总进球数超过 3.5。 team4 的一场比赛(与 team3)的总进球数 = 3,另一场比赛(与 team2)的总进球数 = 1

标签: php mysql count case


【解决方案1】:
  • 分别以HomeTeamAwayTeam 为团队获取结果。
  • 使用UNION ALL 组合结果
  • 将结果用作Derived Table
  • 团队派生表Group by,以获得结果。

尝试以下方法 (SQL Fiddle DEMO):

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 

【讨论】:

  • 完美运行 :) 谢谢!还阅读联合所有和派生表!
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
相关资源
最近更新 更多