假设我有这样的表:
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行获取平均值,因为范围在这两种情况下都是=1,所以它从row1 = 2*5 (值*重要性)从row3 =4*3 sum 2*5+ 4*3取值,并且该和除以2,因为有2行具有相同范围
发布于 2013-04-17 15:07:22
怎么样
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
都是整数类型,则需要将它们强制转换为浮点数,否则除法的结果也将是整数(即,您得到的答案将是7而不是7.6)。投射替换
sum(value*importance) / count(value) sa
在上面的查询中
cast(sum(value*importance) / count(value) as double precision) sa
此外,value
和date
是关键字,不应用作字段名。
https://stackoverflow.com/questions/16062722
复制相似问题