我正在创建一个网站,用户可以从1到5星评价项目(比如说书籍)。我创建了一个MySQL数据库和一个存储关于每个评级(itemid,userid,ratingValue)信息的表格。MySQL:没有匹配行时的AVG
每个项目都有一个专门的网页,我想把这个网页上的信息:(1)收视率和(2)平均评分。我认为这是最好的一个观点。在思考的MySQL查询,在视图中使用,我来:
SELECT ItemID, COUNT(ratingValue), IFNULL(AVG(ratingValue),0) FROM reviews GROUP BY ItemID
问题:如果一个项目尚未评估,也不会出现在查询。我想要的是所有项目都出现在查询结果(视图)中,如果有没有评论的项目,它应该显示信息有0条评论,并且平均评分是一些任意值,假设0
AVG(),如果没有匹配的行
,并返回NULL为此,我试图用IFNULL()函数。但是,它不起作用。例如,在1,2,3,4,5项,其中5项没有评论的数据库,我会得到:
ItemID COUNT(Rating) IFNULL(AVG(ratingValue),0) 1 4 4.0000 2 2 4.0000 3 2 3.5000 4 3 5.0000
就如何克服这个问题的任何想法?
这工作!我从来没有想过使用LEFT JOIN,但这确实是一个很好的解决方案。 –