0

假设我有这样的表:

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(value*importance) from row3 =4*3 sum 2*5 + 4 *3 这个总和除以 2 因为有 2 行具有相同的范围

4

1 回答 1

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都是整数类型,您需要将它们转换为浮点数,否则除法的结果也将是整数(即您得到的答案是 7 而不是 7.6)。投射替换

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

在上面的查询中

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

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

于 2013-04-17T15:07:22.413 回答