MYSQL QUERY сумма из двух таблиц - PullRequest
1 голос
/ 06 ноября 2011

Привет, у меня возникли небольшие проблемы со следующим запросом Mysql, как я могу вычислить SUMS (которые вычисляют точки, 5-ю и 6-ю сумму в запросе) из таблицы team_stats, не из таблицы driver_stats, а также изто же самое условие, что и сейчас, где team_id = 3. Все, что мне нужно, - это перенести эти вычисления из таблицы driver_stats в таблицу team_stats, проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь это сделать, вычисления становятся слишком высокими, как сейчас.не делать их только для того, где team_id = '3' или любое другое число.

Любая помощь будет большой благодарностью.

SELECT       t.teamname,
             t.value,
             SUM(IF(qual_pos = '1', 1,0)) AS poles,
             SUM(IF(race_pos <= '3', 1,0)) AS podiums,
             SUM(IF(race_pos = '1', 1,0)) AS victories,
             SUM(overtakes) AS overtakes,
             SUM(CASE
               WHEN s.track_id = (SELECT MAX(track_id) FROM driver_stats) THEN
                 points
               ELSE
                 0
             End) AS lastracepoints,

             # CHANGE THIS SUM AND THE SUM ABOVE TO CALCULATE
             # the points column in the tale named TEAM_STATS
             # but with the same restrictions as now,
             # only where team_id = 3
             SUM(points) AS points 

FROM         driver_stats s
  LEFT JOIN  drivers d
  ON         d.drivers_id = s.drivers_id
  LEFT JOIN  teams t
  ON         d.team_id = t.team_id
WHERE        d.team_id = 3

1 Ответ

0 голосов
/ 07 ноября 2011

MySQL может позволить вам использовать агрегаты (суммы) без определения предложения group by в особых случаях, но это не типично и не будет работать для вас.

Можно ли использовать функцию агрегирования в выборе выбора без использования предложения Group By?

Я не проверял это при попытке:

SELECT       t.teamname,
             t.value,
             SUM(IF(qual_pos = '1', 1,0)) AS poles,
             SUM(IF(race_pos <= '3', 1,0)) AS podiums,
             SUM(IF(race_pos = '1', 1,0)) AS victories,
             SUM(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
    teamname,
    `value`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...