Я объясню сценарий, формула 1, для каждой команды в формуле 1 есть 2 гонщика, 24 гонщика, 12 команд.Мне нужно получить очки, рассчитанные ниже, из таблицы team_stats, но получить полюсы, подиумы и победы из таблицы driver_stats, поэтому Себастьон Феттель и Марк Уэббер оба являются членами команды team_id = '3', что является красным быком.Мне нужно получить полюса, подиумы, победы из таблицы driver_stats для каждого из них и суммировать их вместе, но рассчитать баллы для команды, которые есть в таблице team_stats.Я столкнулся с тем, что он рассчитывает командные очки дважды для каждого team_id, потому что в таблице driver_stats есть два драйвера, где мне просто нужно сделать SUM для очков в таблице team_stats только для каждого team_id, который водителиявляются членами.
DRIVER_STATS TABLE
| track_id | drivers_id | qual_pos | race_pos | overtakes | points
TEAM STATS TABLE
| track_id | team_id | points |
DRIVERS TABLE
| driver_id | drivername | team_id |
TEAM TABLE COLUMNS
|team_id | teamname | value
Теперь ниже это работает, но подсчитывает баллы из таблицы driver_stats, оно суммирует значения для полюсов обгонов и т. Д., Правильно добавляя два драйвера вместе.Вместо этого мне нужно СУММИТЬ балльную часть для каждого team_id в таблице team_stats, в этой таблице есть только один случай для каждых 2 водителей в таблице driver_stats, от 2 водителей до 1 команды.
SELECT t.teamname,
t.value,
SUM(IF(s.qual_pos = '1', 1,0)) AS poles,
SUM(IF(s.race_pos <= '3', 1,0)) AS podiums,
SUM(IF(s.race_pos = '1', 1,0)) AS victories,
SUM(s.overtakes) AS overtakes,
SUM(CASE
WHEN s.track_id = (SELECT MAX(track_id) FROM driver_stats) THEN
points
ELSE
0
End) AS lastracepoints,
SUM(points) AS points
FROM drivers d
INNER JOIN driver_stats s
ON d.drivers_id = s.drivers_id
AND d.team_id = 3
LEFT JOIN teams t
ON d.team_id = t.team_id
GROUP BY
t.teamname
Этоэто запрос, который я тоже изменил, чтобы попытаться его достичь.
SELECT t.teamname,
t.value,
SUM(IF(s.qual_pos = '1', 1,0)) AS poles,
SUM(IF(s.race_pos <= '3', 1,0)) AS podiums,
SUM(IF(s.race_pos = '1', 1,0)) AS victories,
SUM(s.overtakes) AS overtakes,
SUM(CASE
WHEN ts.track_id = (SELECT MAX(track_id) FROM team_stats) THEN
ts.points
ELSE
0
End) AS lastracepoints,
SUM(ts.points) AS points
FROM drivers d
INNER JOIN driver_stats s
ON d.drivers_id = s.drivers_id
AND d.team_id = 3
LEFT JOIN teams t
ON d.team_id = t.team_id
INNER JOIN team_stats ts
ON ts.team_id = d.team_id
GROUP BY
t.teamname
Числа теперь вышли из-под контроля, присоединив к нему team_stats и изменив сумму очков на team_stats, похоже,он делает сумму в таблице team_stats дважды для каждого драйвера в таблице driver_stats, где мне нужно сделать это один раз.
Любая помощь очень ценится.