平均条件
问题描述:
我想弄清楚如何计算一个变量的确切平均值。 目前我有此查询:(简体):平均条件
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来尝试解决我所遇到的问题。
答
使用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
答
,你可以尝试使用加入子查询是这样的:
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
答
要计算总的平均chargability:
select avg(Chargeability) as avgChargeability
from (select id, avg(Chargeability) as Chargeability
from t
group by id
) id;
你可以使用将此值带到每一行或子查询。
'avg(不同的可充电性)over(由GROUP_ID分区)'?假设你想要小组的平均值......我相信87.8的结果。尽管如果ID 1和ID 3在同一组中具有相同的可充电性,它可能会错误地处理您想要平均的方式...... – xQbert