我想平均评价。但是应用默认评级4.用户将以4的评分开始,然后如果有人留下3,他们的评分将计算为3.5
目前,我只使用简单的AVG:
SELECT AVG("reviews"."rating") AS average_rating
FROM "reviews"
WHERE "reviews"."user_id" = :user_id
有没有办法可以选择虚拟值4,然后将其包含在AVG计算中?如果重要的话,我使用Rails和PG,但是想在数据库中保持计算速度(而不是在Ruby中提取所有数据并做平均值)。
答案 0 :(得分:2)
您可以自己计算平均值:
SELECT (sum(rating)+ 4.0)/(count(rating)+ 1) AS average_rating
FROM reviews
WHERE ...
答案 1 :(得分:1)
如果你想对待它,就像每个人都有一个评级4的虚拟评论,那么你可以UNION
他们的实际评级与该值。
SELECT AVG( rating ) AS average_rating FROM (
SELECT reviews.rating FROM reviews WHERE reviews.user_id = :user_id
UNION ALL
SELECT 4 AS rating
)
这也会导致没有评论的人平均为4,这听起来像你想要的。