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