[英]Postgres SQL : how do I recalculate average value, after an existing value from the average has been changed
使用下面的函数,当您第一次对标题进行评分,然后为该标题给出不同的评分时,该标题的平均评分将是不正确的。
标题 'tt9910206' 的投票数为 4,在调用该函数之前平均为 8。 第一次调用该函数并给出 7 分时,numvotes 为 5,预期平均值为 7,8,该函数确实返回该值。 但是当将评分从 7 更改为 8 时,预期结果为 8,但函数返回 7,84。
我怀疑这是因为在重新计算平均值时,该函数没有考虑到用户已经取消了他们的评分。 我该如何解决这个问题,所以当用户更改他们的评分时,该函数会使用用户最初给它评分之前的平均评分数来重新计算平均值?
编辑:在这里找到答案
您的函数中可能还有其他问题。 但是您似乎忘记了 Postgres 进行整数除法。 所以, 1/2
是0
,而不是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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.