在SQL中生成评级的运行总和

时间:2010-05-25 04:26:30

标签: postgresql sum

我有一张评级表。归结为:

rating_value  created
+2            april 3rd
-5            april 20th

因此,每当有人获得评分时,我都会在数据库中跟踪该评级事件。

我想生成一个评分历史记录/时间图表,其中评分是图表上该时间点之前所有评级的总和。

即。一个人4月5日的评分可能是select sum(rating_value) from ratings where created <= april 5th

这种方法的唯一问题是我必须在我感兴趣的时间间隔内逐日运行。使用这种数据生成运行总计是否有一些技巧?

否则,我认为最好的方法是在个别评级的同时创建一个非规范化的“评级历史”表。

2 个答案:

答案 0 :(得分:8)

如果你有postgresql 8.4,你可以使用window-aggregate函数来计算一个运行总和:

steve@steve@[local] =# select rating_value, created,
                              sum(rating_value) over(order by created)
                       from rating;
 rating_value |  created   | sum 
--------------+------------+-----
            2 | 2010-04-03 |   2
           -5 | 2010-04-20 |  -3
(2 rows)

请参阅http://www.postgresql.org/docs/current/static/sql-expressions.html#SYNTAX-WINDOW-FUNCTIONS

答案 1 :(得分:1)

尝试添加group by语句。它为您提供每天的评级值(例如数组)。当您随时间输出评级值时,您可以将之前的数组元素一起添加。