[英]How to properly calculate averages in SQL
诸如每位员工的收入或每种产品的售价
哪种方法是正确的,是否存在一种方法有效而另一种方法无效的情况?
SUM(revenue)/SUM(employee)
/* OR */
AVG(revenue/employee)
我一直在上面得到不同的答案。
在不了解您的表结构的情况下,很难知道什么适合您。
SUM(revenue)/SUM(employee)
将所有收入的总和除以员工的总和(或者可以计算)。
其中AVG(revenue/employee)
将对所有revenue/employee
求和,然后将结果除以行数。
出于您的目的,我认为第一种方法是合适的。
两人正在做两件截然不同的事情。 一个是计算总体平均值(第一个)。 第二个是计算分别处理每一行的加权平均值。
作为一个简单的例子,考虑一个小表:
employees revenue
99 99
1 100
第一个返回(100 + 99) / 100 = 1.99
。 如果您有一个包含 100 行的表,每个“员工”一个并且收入是revenue / employee
(即1
行 99 行, 100
行 1 行),这将是相同的平均值。
第二个返回(99 / 99) + (100 / 1)
= 101。这将“平等地”对待每一行。 也就是说,它是一个有偏差的平均值。 有时这很有用,但通常不适用于计数。 例如,它可能对某种费率有用。 或者,如果行上的大小大致相同,它可能会很有用。
一般来说,在大多数情况下,根据您问题中的有限信息,您会想要第一种格式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.