我有三张桌子:
rtgitems
rtgusers
POI
(因空间原因,表格不完整)。
我想解决此表单:
其中r_i,x是用户“rater”的列“voto”的值“i”表示“item”x而avg_x是平均值(从“totalrate”和“nrrates”除以 - > totalrate / nrrates )。 | G |给出并且不是麻烦。
我想要这个表结果:
Nome (from POI) | VD_x(G)
Tour Eiffel | 23
Arc | 18
...
我尝试了第一个用于计算平均值的第一个表(第三个表我不知道如何与其他表匹配):
SELECT totalrate, nrrates, voto FROM rtgitems INNER JOIN rtgusers ON rtgitems.item=rtgusers.item GROUP BY rater
但不起作用。
感谢您的帮助。
答案 0 :(得分:1)
只关注rtgusers
表。如果你想引入名字,那没关系。您可以在方差计算后执行此操作(您似乎知道join
是什么)。第一个表似乎是多余的问题。
您可以通过预先计算汇总值然后应用公式来计算差异。我认为这是你想要的基本逻辑:
SELECT ru.item, (1.0 / max(rus.n)) * sum(power(ru.voto - avg_voto), 2)
FROM rtgusers ru join
(select ru.item, avg(voto * 1.0) as avg_voto, count(*) as n
from rtgusers ru
group by ru.item
) rus
on ru.item = rus.item
group by ru.item;