SQL-从另一个表的计数中获取平均值

SQL-从另一个表的计数中获取平均值,sql,count,average,Sql,Count,Average,所以我有两个表:列表和评论。 我试图得到最好的评论,这是在一个国家的基础上市。所以我需要从列表的所有评论中获得平均值,然后描述列表 表结构: 清单:id;标题国家 审查: 身份证件上市公司id;评级(从1-5) 我只是可以解决大多数评论的DESC列表,但现在我尝试获得评论评级的平均值 SELECT *, (SELECT COUNT(*) FROM reviews rv WHERE ls.id = rv.listing_id) Count

所以我有两个表:列表和评论。 我试图得到最好的评论,这是在一个国家的基础上市。所以我需要从列表的所有评论中获得平均值,然后描述列表

表结构: 清单:id;标题国家

审查: 身份证件上市公司id;评级(从1-5)

我只是可以解决大多数评论的DESC列表,但现在我尝试获得评论评级的平均值

SELECT *,
       (SELECT COUNT(*) 
          FROM reviews rv 
         WHERE ls.id = rv.listing_id) Count 
  FROM listing ls 
 WHERE ls.state ='$get_state' 
 ORDER BY Count DESC
样本数据:

Listing:

id title                State 
1  Hotel with nice view Arizona
2  Hotel to stay        Arizona

Review:

id listing_id rating
1  1          4(stars)
2  1          4(stars)
3  1          3(stars)
4  2          5(stars)
清单id 1得到了3条评论,总的星级值为11/3评论=3.6星

清单ID2得到了1次审查,总的星号值为5/1=5星

现在我应该首先得到清单2,然后是清单1 我想在PHP页面上显示整个内容

下一步我能做什么? 感谢您的帮助

您只需使用AVG()函数即可获得平均评分

SELECT ls.id,
       title,
       state,
       ROUND(AVG(rating),2) avg_rating
  FROM listing ls
  JOIN review rv
    ON ls.id = rv.listing_id
 WHERE ls.state = '$get_state'
 GROUP BY ls.id,
          title,
          state
 ORDER BY avg_rating DESC
如果您使用的是MSSQL,请强制转换列额定值以获得十进制精度(如浮点或十进制)


提供样本数据和预期结果result@FerdinandGaspar完成,谢谢请标记您正在使用的RDBMSusing@FerdinandGaspar我还有一个问题。。。我添加了一个功能,您必须确认您的电子邮件才能解锁评论。现在,我在审阅表中有一个名为mail_approved的列。问题是,我只需要获得邮件批准=1的评论的平均评级。在哪里可以添加此条款?我必须重新格式化整个查询吗?非常感谢你!谢谢工作顺利!我还有一个问题。。。我添加了一个功能,您必须确认您的电子邮件才能解锁评论。现在,我在审阅表中有一个名为mail_approved的列。问题是,我只需要获得邮件批准=1的评论的平均评级。在哪里可以添加此条款?我必须重新格式化整个查询吗?非常感谢你!
ROUND(AVG(CAST(rating AS FLOAT)),2) avg_rating