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