2017-05-04 79 views
3

我想弄清楚如何计算一个变量的确切平均值。 目前我有此查询:(简体):平均条件

select ID , Group_ID, Chargeability,Job_No_, Group_Charg FROM Data1 


ID  Group ID  Chargeability  Job No_  Group Chargeability 
1    a    90    c1     88.11 
1    a    90    c2     88.11 
1    a    90    c3     88.11 
1    a    90    c4     88.11 
2    a    85.6    c8     88.11 
2    a    85.6    c17    88.11 
2    a    85.6    c6     88.11 

计算平均值不实际的。对于每个ID,Chargability是固定的,因此平均值不应考虑每个ID的行数,因为它只是对值的替换,因为每个ID都有很多job_No。

也就是说,我希望Group_chargeability =(90 + 85.6)/ 2代替(90 * 4)+(85.6 * 3)/ 7,正如目前所做的那样。

该查询由多个子查询组成,其中一些子查询也调用函数。这就是为什么我不能使用group by来尝试解决我所遇到的问题。

+0

'avg(不同的可充电性)over(由GROUP_ID分区)'?假设你想要小组的平均值......我相信87.8的结果。尽管如果ID 1和ID 3在同一组中具有相同的可充电性,它可能会错误地处理您想要平均的方式...... – xQbert

回答

2

使用AVG功能与SUB QUERY

SELECT d.ID, d.Group_ID, d.Chargeability, d.Job_No_, 
AVG(SELECT MIN(sub.Chargeability) 
FROM Data1 sub 
WHERE sub.id = d.id AND sub.Job_No_ = d.Job_No_ 
GROUP BY sub.ID) AS GROUP_Chargeability 
FROM Data1 
1

,你可以尝试使用加入子查询是这样的:

SELECT d.ID, d.GROUP_ID, d.CHARGEABILITY, d.JOB_NO_, d2.charges 
FROM Data1 d LEFT JOIN 
(SELECT DISTINCT ID, GROUP_ID, AVG(CHARGEABILITY) AS CHARGES FROM Data1) d2 
    ON d2.ID = d.ID AND d2.GROUP_ID = d.GROUP_ID 
1

要计算总的平均chargability:

select avg(Chargeability) as avgChargeability 
from (select id, avg(Chargeability) as Chargeability 
     from t 
     group by id 
    ) id; 

你可以使用将此值带到每一行或子查询。