SQL中的方差不同与三个表

时间:2014-08-15 18:50:41

标签: mysql sql

我有三张桌子:

  1. rtgitems

    rtgitems

  2. rtgusers

    rtgusers

  3. POI

    POI

  4. (因空间原因,表格不完整)。

    我想解决此表单:

    vd

    其中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
    

    但不起作用。

    感谢您的帮助。

1 个答案:

答案 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;