SQL-从另一个表的计数中获取平均值
所以我有两个表:列表和评论。 我试图得到最好的评论,这是在一个国家的基础上市。所以我需要从列表的所有评论中获得平均值,然后描述列表 表结构: 清单:id;标题国家 审查: 身份证件上市公司id;评级(从1-5) 我只是可以解决大多数评论的DESC列表,但现在我尝试获得评论评级的平均值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
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