2016-12-21 494 views
0

我有不同人的分量。MySQL:計算標準差的正確方法

平均值爲:

select avg(weight) as avg_weight 
from table; 

但是,什麼是stddev()std()之間的區別?是否有可能從avg_weight得到標準偏差?

這是正確的做法:

select stddev(weight) 
from table; /* -> is here where the function avg(weight) included? */ 

或者我需要這樣的:

select stddev(avg(weight)) 
from table; /* (but this does not work) */ 

感謝。

+0

此問題c應該有太多的答案。你爲什麼不從這裏閱讀它:http:// www。mysqltutorial.org/mysql-standard-deviation/ – CodeLikeBeaker

+0

可以請我說,如果這是正確的,請 從表中選擇stddev(weight); – Melisa

回答

1

在MySQL中,它們提供了四種與標準偏差相關的不同功能。他們可能只提供了兩個STDDEV_POPSTDDEV_SAMP(人口與樣本S.D.)。他們提供了另外兩個兼容標準SQL(STD)和Oracle(STDDEV)。

下面是從MySQL manual的描述:

STD(表達式)

返回expr的總體標準偏差。這是對標準SQL的擴展。標準的SQL函數STDDEV_POP()可以用來代替。

如果沒有匹配的行,則STD()返回NULL。

STDDEV(表達式)

返回expr的總體標準偏差。該功能是爲了與Oracle兼容而提供的。標準的SQL函數STDDEV_POP()可以用來代替。

如果沒有匹配的行,則STDDEV()返回NULL。

STDDEV_POP(表達式)

返回expr的總體標準偏差(VAR_POP的平方根())。您也可以使用STD()或STDDEV(),它們是等效的,但不是標準的SQL。

如果沒有匹配的行,STDDEV_POP()返回NULL。

STDDEV_SAMP(表達式)

返回expr的樣本標準偏差(VAR_SAMP的平方根()。

如果沒有匹配的行,STDDEV_SAMP()返回NULL。

0

您不能在STD內部使用AVG或任何其他聚合函數。列中的每一個。

SELECT 
AVG(table.column) AS average_, 
STD(table.column) AS std_, 
etc.... 
FROM 
table;