繁体   English   中英

如何正确计算 SQL 中的平均值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM