2014-04-07 4 views
0

У меня вопрос с использованием MySQL. У меня есть 2 стола, один с именами игр и один с разными рейтингами для игр. Я хочу, чтобы иметь возможность искать игру по названию и видеть средние оценки для каждой игры. До сих пор мне удалось получить средний рейтинг, но я вижу только рейтинг 1 игры вместо нескольких записей. Вот мой запрос:Среднее значение в MySQL

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating 
    FROM games 
    JOIN reviews 
    ON games.id = reviews.game 
    WHERE games.name LIKE '%spider%' 
    AND type = '7' 
    AND rating != 0 

Я надеюсь, что некоторые из вас умные люди могут помочь мне с этим! Спасибо, Роберт

ответ

1

Вы должны использовать пункт GROUP BY на соответствующем поле, чтобы получить среднее значение для каждой группы, в противном случае он будет вычислить среднее всех строк. Я думаю, это games.id, но зависит от ваших схем таблиц.

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating 
FROM games 
JOIN reviews 
ON games.id = reviews.game 
WHERE games.name LIKE '%spider%' 
AND type = '7' 
AND rating != 0 
GROUP BY games.id; 

Подробнее о так называемой aggregate functions

1

Вы должны использовать GROUP BY games.name, чтобы разделить разные названия. Проблема в том, что AVG представляет собой сводную функцию, которая сворачивает результаты. Результаты GROUP BY нарушают результаты.

SELECT games.name, CAST(AVG(reviews.rating) as decimal(6, 1)) AS average_rating 
FROM games 
    JOIN reviews ON games.id = reviews.game 
WHERE games.name LIKE '%spider%' AND type = '7' AND rating != 0 
GROUP BY games.name 
Смежные вопросы