以下是我的一个表的结构:
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 | ...
关键在于我想知道差异最大的是哪一组。
答案 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
即可获得价值。