假设我有这样的表:
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行具有相同的范围
答案 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
请注意,如果value
和importance
都是整数类型,则需要将它们转换为float,否则除法的结果也是整数(即你得到的答案是7不是7.6)。要施放替换
sum(value*importance) / count(value) sa
在上面的查询中
cast(sum(value*importance) / count(value) as double precision) sa
此外,value
和date
是关键字,不应用作字段名称。