Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL:没有匹配行时的平均值_Mysql_Null_Average - Fatal编程技术网

MySQL:没有匹配行时的平均值

MySQL:没有匹配行时的平均值,mysql,null,average,Mysql,Null,Average,我正在创建一个网站,用户可以对物品(比如书籍)进行评级,从1星到5星不等。我创建了一个MySQL数据库和一个表,其中存储了关于每个评级的信息(itemid、userid、ratingValue) 每个项目都有一个专门的网页,我想在这个页面上放一些信息:(1)评分数和(2)平均评分。我认为这是最好的一种观点。考虑到要在视图中使用的MySQL查询,我得出以下结论: 根据ItemID从评论组中选择ItemID、COUNT(ratingValue)、IFNULL(AVG(ratingValue)、0 问

我正在创建一个网站,用户可以对物品(比如书籍)进行评级,从1星到5星不等。我创建了一个MySQL数据库和一个表,其中存储了关于每个评级的信息(itemid、userid、ratingValue)

每个项目都有一个专门的网页,我想在这个页面上放一些信息:(1)评分数和(2)平均评分。我认为这是最好的一种观点。考虑到要在视图中使用的MySQL查询,我得出以下结论:

根据ItemID从评论组中选择ItemID、COUNT(ratingValue)、IFNULL(AVG(ratingValue)、0

问题:如果某个项目尚未评级,它将不会出现在查询中。我想要的是,所有项目都出现在查询结果(视图)中,如果有一个项目没有评论,它应该显示有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 ItemID计数(额定值)如果为空(平均值(额定值),则为0) 1 4 4.0000 2 2 4.0000 3 2 3.5000 4 3 5.0000
关于如何克服这个问题,您有什么想法吗?

您必须有另一个表列出您的所有项目(不管它们是否有评论),然后将该表左键连接到您的
评论
表。没有这一点,就无法仅从
reviews
表中推断出哪些项目可能存在,而这些项目没有审查

比如:

SELECT
    i.itemID AS itemID,
    COUNT(r.rating) AS ratingCount,
    AVG(ratingValue) AS averageRating
FROM items AS i
LEFT JOIN reviews AS r
  ON i.itemID = r.itemID
GROUP BY i.itemID
这将产生如下结果:

ItemID  ratingCount   averageRating
1       4             4.0000
2       2             4.0000
3       2             3.5000
4       3             5.0000
5       0             NULL

成功了!我从未想过使用左连接,但这确实是一个很好的解决方案。