php / mysql — подсчет и группировка

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

Решение

  • Получить результаты для команды, как 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
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector