如何提取加权平均值?

时间:2013-04-17 14:27:04

标签: sql firebird

假设我有这样的表:

IDofemployee category value importance range  date
1            1        2     5          1       2013-04-17
1            1        3     4          2       2013-04-17
1            2        4     3          1       2013-04-17
2            1        7     2          1       2013-04-18
2            1        3     2          2       2013-04-18

现在我想在firebird中得到SQL查询的结果:

(其中范围与所有具有相同范围的值的平均值相同,但对于不同的员工则分别)

emp    wAVG                           date
1      (([2*5+4*3]/2)+[3*4])/3 =7.6   2013-04-17
2      (7*2+3*2)/2=10                 2013-04-18

所以这是因为在emp1中它必须从第1行和第3行获取avg,因为 范围是两种情况= 1所以它从row1 = 2 * 5(值*重要性) 从row3 = 4 * 3 总和2 * 5 + 4 * 3,这个总和是 除以2,因为有2行具有相同的范围

1 个答案:

答案 0 :(得分:2)

怎么样

select IDofemployee, date, sum(sa) / sum(sc) as wAVG
from (
   select IDofemployee, date, sum(value*importance) / count(value) sa, count(value) sc
   from TAB
   group by IDofemployee, range, date
)
group by IDofemployee, date

请注意,如果valueimportance都是整数类型,则需要将它们转换为float,否则除法的结果也是整数(即你得到的答案是7不是7.6)。要施放替换

sum(value*importance) / count(value) sa

在上面的查询中

cast(sum(value*importance) / count(value) as double precision) sa

此外,valuedate是关键字,不应用作字段名称。