2015-07-24 2 views
2

Я пытаюсь суммировать столбцы для отображения статистики на спортивном веб-сайте. Мой запрос mysql:Группа по запросу не возвращает все значения

SELECT s.schoolid, s.season, s.playerid, SUM(s.serviceaces) AS sumAces, SUM(s.attackkills) AS sumKills, SUM(s.assists) AS sumAssists, p.fname, p.lname 
FROM `stats` AS s 
LEFT JOIN `players` AS p ON p.id = s.playerid 
GROUP BY s.playerid 
HAVING s.schoolid = 2 AND s.season = 2015 

Это даст мне 9 записей. Это должно дать мне 12, так как в команде 2 игрока из 12 человек, и у всех есть статистика. Если я поменяю свой запрос на простой запрос на выбор

SELECT s.*, p.fname, p.lname 
FROM `stats` AS s 
LEFT JOIN `players` AS p ON p.id = s.playerid 
WHERE s.schoolid = 2 AND s.season = 2015 

Я возвращаю 24 записи. Это имеет смысл, так как для этой команды в игре насчитывается две игры, рассчитанные на 12 игр.

Что я делаю неправильно, когда пытаюсь суммировать свои столбцы и группу игроком?

Редактировать Вот SQL ссылка скрипку - http://sqlfiddle.com/#!9/e5cf5/1/0)

Я нашел проблему, пропавшие люди имеют статистику с 2014 года я буду читать на ссылку Олли, чтобы увидеть, если это моя проблема.

Так появляется мое решение так легко, как добавление WHERE s.season = 2015 И s.schoolid = 2 для окончательного запроса

SELECT s.schoolid, s.season, s.playerid, SUM(s.serviceaces) AS sumAces, SUM(s.attackkills) AS sumKills, SUM(s.assists) AS sumAssists, p.fname, p.lname 
FROM `stats` AS s 
LEFT JOIN `players` AS p ON p.id = s.playerid 
WHERE s.season = 2015 
GROUP BY s.playerid 

пропущенного ответ Hitesh как я редактировал это. Он понял это правильно.

+1

Возможно, вы злоупотребляете пагубным расширением MySQL для GROUP BY. Прочитай это. https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html –

ответ

1

Для этого типа вопросов пожалуйста, опубликуйте схему таблицы и образец дампа записи и желаемый результат, чтобы мы могли протестировать. Я думаю, что это может вам помочь.

SELECT s.schoolid, s.season, s.playerid, SUM(s.serviceaces) AS sumAces, SUM(s.attackkills) AS sumKills, SUM(s.assists) AS sumAssists, p.fname, p.lname 
    FROM `stats` AS s 
    LEFT JOIN `players` AS p ON p.id = s.playerid 
    WHERE s.schoolid = 2 AND s.season = 2015 
    GROUP BY s.playerid 
0

Переключите from и left join положения - вы хотите водить запрос с 'стороны и отображения playersnull сек, где статистика отсутствует, а не наоборот:

SELECT s.schoolid, 
      s.season, 
      s.playerid, 
      SUM(s.serviceaces) AS sumAces, 
      SUM(s.attackkills) AS sumKills, 
      SUM(s.assists) AS sumAssists, 
      p.fname, 
      p.lname 
FROM  `players` AS p 
LEFT JOIN `stats` AS s ON p.id = s.playerid 
GROUP BY s.playerid 
HAVING s.schoolid = 2 AND s.season = 2015 
+0

Хорошая мысль, но не идти. Один из игроков, которых нет, имеет идентификатор игрока 9874. Итак, если я делаю простой запрос SELECT * FROM 'stats' WHERE' playerid' = 9874 AND 'schoolid' = 2 AND' season' = 2015 Я получаю две строки данных –

+0

Что отличает плеер 9874? Вы не получите его данные, если JOIN не сможет удовлетворить запрос о том, чтобы поместить имя в свой идентификатор? Или, пожалуйста, покажите нам некоторые данные - скрипт sql или иначе. – user3741598

Смежные вопросы