SQL - 从另一个表中获取AVG

时间:2017-09-11 19:19:51

标签: sql count average

所以我有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页面上显示整个内容。

接下来我该怎么办? 谢谢你的帮助

1 个答案:

答案 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