所以我有2个表:列表和评论。 我试图获得最佳评论的列表,该评论基于州。因此,我需要从列表的所有评论中获取AVG,然后DESC列出。
表格结构: 清单:id;标题;州; ...
评论: ID; listing_id;评级(从1-5)
我可以解决最多评论的DESC列表,但现在我尝试获得评论评级的AVG。
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)
Listing id 1获得3条评论,总的明星价值为11/3条评论= 3.6颗星
列表ID 2获得1条评论,总星数值为5/1 = 5星
现在我应该首先获得清单2,然后是清单1 我想在PHP页面上显示整个内容。
接下来我该怎么办? 谢谢你的帮助
答案 0 :(得分:0)
您可以使用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,则CAST列评级将获得小数精度(浮点数或小数)
ROUND(AVG(CAST(rating AS FLOAT)),2) avg_rating