【问题标题】:Postgres SQL : how do I recalculate average value, after an existing value from the average has been changedPostgresql:在平均值的现有值已更改后,如何计算平均值
【发布时间】:2020-11-18 10:55:05
【问题描述】:

使用下面的函数,当你第一次给一个标题评分,然后给这个标题一个不同的评分时,那个标题的平均评分是不正确的。

在调用函数之前,title 'tt9910206' 的投票数为 4,averagerating 为 8。 第一次调用该函数并给出 7 分时,numvotes 为 5,预期平均值为 7,8,该函数确实返回。但是,将评分从 7 更改为 8 时,预期结果为 8,但函数返回 7,84。

我怀疑这是因为在重新计算平均值时,该函数没有考虑到用户撤消了他们的评分。 我该如何解决这个问题,所以当用户更改他们的评分时,该函数会使用用户最初给它评分之前的平均评分数重新计算平均值?

编辑:在这里找到答案

Finding an average after replacing a current value

【问题讨论】:

    标签: sql postgresql math average mathematical-optimization


    【解决方案1】:

    您的函数中可能还有其他问题。但是您似乎忘记了 Postgres 进行整数除法。所以,1/20,而不是 0.5

    我注意到这样的计算:

    count( user_titlerate.tconst ) / count( user_titlerate.tconst ) 
    

    COUNT() 返回整数。我通常将其修改为:

    count( user_titlerate.tconst ) * 1.0 / count( user_titlerate.tconst ) 
    

    但您可以使用其他构造,例如:

    count( user_titlerate.tconst )::numeric / count( user_titlerate.tconst ) 
    

    【讨论】:

    • 哦,那部分只是为 numvotes 添加 +1,基本上每次用户进行新评分时,电影的评分量都会增加 1。它应该是我拥有的 int在这里简化了这部分(title_basicsnew.numvotes +1)这与上面的代码完全相同。
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 2017-02-06
    • 2013-01-14
    • 1970-01-01
    • 2020-07-05
    • 2016-11-14
    相关资源
    最近更新 更多