我想知道是否有一种方法可以从同一行内的MySQL中的几个整数字段中选择标准差。显然,如果我使用
SELECT STDDEV(col1) FROM mytable我只得到了特定列的标准差。让我们假设我有一个表,比如:id,somefield1,somefield2, integerfield1,integerfield2,integerfield3, ... ,integerfield30。现在我想在一行中选择整数域1-30的标准差,并将其保存为sdfield。当然,我可以使用统计软件来实现这一点,但我只是想知道是否有一种方法可以直接在MySQL中实现。
发布于 2010-10-22 16:19:25
我自己找到了两个解决方案:
1)规范化数据库。我最终得到了两个表:
表1 uid |配置信息1|配置元信息2
表2 uid | col | result_of_col
然后我就可以很容易地使用标准的STDDEV函数了。
2)使用R。数据是非规范化格式,因为它应该在统计分析中使用。因此,很容易进入R并使用以下代码。
sd(t(数据集1:4,3:8))
请注意,我只是通过选择第3-8列来获取此data.frame的数字部分。不要受到太多数据的影响(这就是为什么我这次只使用前几行的原因)。t()调换必要的数据,因为sd()只处理列。
在vsn包中有一个函数rowSds,它的工作原理应该类似于rowMean和rowSum,但不知何故,它可能会被弃用。至少这个包在瑞士CRAN镜像上是不可用的;)。
另外一个人。
发布于 2010-10-21 15:59:48
为简单起见,假设您有名为A、B、C ...的n列。:
SELECT SQRT(
(A*A + B*B + C*C + ...)/n - (A+B+C+...)*(A+B+C+...)/n/n) AS sd
FROM table;发布于 2010-10-21 16:08:26
您是否尝试过使用UNION来有效地将所有列值放到单独的行中?可能是这样的:
SELECT STDDEV(allcols)
FROM (
SELECT col1 FROM table WHERE id=requiredID
UNION
SELECT col2 FROM table WHERE id=requiredID
UNION
SELECT col3 FROM table WHERE id=requiredID
UNION
SELECT col4 FROM table WHERE id=requiredID
UNION
SELECT col5 FROM table WHERE id=requiredID
)https://stackoverflow.com/questions/3985333
复制相似问题