gpt4 book ai didi

php - MySQL:表内的标准偏差平均值

转载 作者:行者123 更新时间:2023-11-29 05:32:14 25 4
gpt4 key购买 nike

这是我的一个表的结构:

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 中内置的标准偏差函数实际上如何处理多个值。

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

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

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

组| avg_stddev1 | 20,8282052 | ...3 | ...

重点是我想知道哪个组的差异最大。

最佳答案

因为 mysql native 函数 STDDEV_POP 只接受列,你必须通过使用临时表来欺骗它,这将有一个包含所有值的列(这对标准偏差很重要),为此将 UNION ALL 与 3 个 SELECTS 一起使用,每个用于一个有意义的列,并按行 ID 对其进行分组。

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 并创建另一个临时表以从中选择平均值:

SELECT 
id_group,
AVG(row_stddev) AS group_avg
FROM (
SELECT
id,
id_group,
STDDEV_POP(val) AS row_stddev
FROM (
SELECT id, id_group, val1 AS val FROM stdev_table
UNION ALL
SELECT id, id_group, val2 AS val FROM stdev_table
UNION ALL
SELECT id, id_group, val3 AS val FROM stdev_table
) tmp0
GROUP BY id
) tmp1
GROUP BY id_group

关于php - MySQL:表内的标准偏差平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13789443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com