mysql avg group
Суть такова: есть две таблицы. В одной данные игры. В другой - рейтинг.
Запрос объединяет таблицы и пытается высчитать средний балл по каждой игре.
Код:
select `games`.`id` as id, `games`.`name` as name, AVG(`gamesrating`.`rating`) as rating
from `games` left join `gamesrating`
on `games`.`id`=`gamesrating`.`subject`
group by rating
from `games` left join `gamesrating`
on `games`.`id`=`gamesrating`.`subject`
group by rating
Таблица gamesrating:
id - просто аутоинкремент, без функциональной нагрузки,
subject - соответствует id игры
rating - оценка игры одним из юзеров
user - соответствует id юзера, поставившего оценку
Соответственно, одной игре может быть несколько оценок от разных игроков. [Если бы оценка была одним числом, какой мне смысл выносить её в другую таблицу?] А мне нужно вычислить одним запросом средний рейтинг каждой игры.
групировать по игре надо, а не по рейтингу.
Код:
SELECT `games`.`id` AS id, `games`.`name` AS name, AVG(`gamesrating`.`rating`) AS rating
FROM `games` LEFT JOIN `gamesrating`
ON `games`.`id`=`gamesrating`.`subject`
GROUP BY 1, 2
FROM `games` LEFT JOIN `gamesrating`
ON `games`.`id`=`gamesrating`.`subject`
GROUP BY 1, 2
Цитата: CorsaiR
Группировать нужно по играм
Думал уже спорить и доказывать...
Точно!
А в остальном должно работать?
Не будет выдавать все строки, возникшие из-за соединения таблиц?
Ибо в селекте не должно быть полей, которые не участвую в групБай, или агрегативынх ф-циях