2014-04-07 41 views
0

我有一个使用MySQL的问题。我有两张桌子,一张是游戏名称,另一张是游戏的评分。我希望能够按名称搜索游戏并查看每场比赛的平均评分。到目前为止,我得到了平均评分,但我只能看到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