MySQL:表中的标准偏差平均值

时间:2012-12-09 16:49:04

标签: php mysql standard-deviation

以下是我的一个表的结构:

id | group | val1 | val2 | val3
1  | 1     | 22   | 23   | 60
2  | 1     | 40   | 60   | 80
3  | 2     | 50   | 5    | 70
4  | 2     | ...
5  | 2     | 
6  | 3     | 
...

在我的PHP文档中,我通过每行使用val1 + val2 + val3等来计算标准差.WHERE组等于我正在显示的那个。

现在我想知道,通过使用MySQL,每行的标准偏差整个群组的平均值(row1stddev+row2stddev+...)/n

我尝试过使用子查询,但我只能获得一个值。我认为我对MySQL的内置标准偏差函数如何实际使用多个值缺乏了解。

EDIT。 这是我正在寻找的两件事:

id | group | stddev
1  | 1     | 21,65641
2  | 1     | 20
3  | 2     | 33,29164
4  | 2     | ...
5  | 2     | 
6  | 3     | 

按组划分(所有stddev的平均值):

组| avg_stddev 1 | 20,828205 2 | ... 3 | ...

关键在于我想知道差异最大的是哪一组。

2 个答案:

答案 0 :(得分:2)

由于mysql本机函数STDDEV_POP仅接受列,因此必须使用临时表来欺骗它,该临时表将包含一行,其中包含所有值(对标准偏差很重要),用于该用途{{ 1}}包含3个UNION ALL,每个用于一个有意义的列,并按行ID对其进行分组。

SELECTS

您还可以选择其他列 - SELECT id, STDDEV_POP(val) AS row_stddev FROM ( SELECT id, val1 AS val FROM stdev_table UNION ALL SELECT id, val2 AS val FROM stdev_table UNION ALL SELECT id, val3 AS val FROM stdev_table ) tmp0 GROUP BY id 并创建另一个临时表以从中选择平均值:

group

答案 1 :(得分:1)

如果我理解正确,你应该创建视图

CREATE VIEW view_name AS SELECT val1, val2, val3,  val1 + val2 + val 3 / 3 AS average FROM tablename;

然后只需SELECT * FROM view_name即可获得价值。