MySQL:计算标准差的正确方法

时间:2016-12-21 16:37:20

标签: 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) */

感谢。

2 个答案:

答案 0 :(得分:4)

在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。

答案 1 :(得分:0)

您不能在STD或任何其他聚合函数中使用AVG。列中的每一个。

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