php / mysql - подсчет и группировка - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть база данных с играми и их счетами.Теперь я хочу выполнить запрос, который подсчитывает все результаты для каждой команды с общим количеством забитых голов более 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

Но это только для домашних игр, поэтому мне нужен способ добавить к этому и выездные игры.

1 Ответ

0 голосов
/ 29 сентября 2018
  • Получите результаты для команды как HomeTeam и AwayTeam отдельно.
  • Объедините результаты, используя UNION ALL
  • Используйте результаты как Производная таблица .
  • Group by в производной таблице для команды , для получения результатов.

Попробуйте следующее ( DEMO SQL Fiddle ):

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 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...