使用虚拟默认列获取SQL平均值

时间:2016-06-14 19:21:58

标签: sql postgresql aggregate-functions

我想平均评价。但是应用默认评级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中提取所有数据并做平均值)。

2 个答案:

答案 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,这听起来像你想要的。