【发布时间】:2017-10-23 09:39:34
【问题描述】:
我的问题听起来很简单,但我卡住了。
Sample Data:
Listing:
id title State
1 Hotel with nice view Arizona
2 Hotel to stay Arizona
Review:
id listing_id rating mail_approved
1 1 4(stars) 1
2 1 4(stars) 0
3 1 3(stars) 1
4 2 5(stars) 1
所以现在我得到了列表的 AVG 值,但是当评论为 mail_approved = 1 时,我只想获得每个列表的值。但是当没有评论或没有评论时 mail_approved = 1 它应该只给我 0.0 个评论点的列表。因此,如果他们有评论,我想找回所有列表,只需计算这些评论的 AVG,mail_approved = 1
我该怎么做? 我必须重写整个查询吗?
这是我的查询:
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
【问题讨论】:
-
将
join(=inner join) 更改为left join,我想你就在那里。 -
LEFT JOIN review rv ON ls.id = rv.listing_id AND rv.mail_approved = 1 -
用您正在使用的数据库标记您的问题。