使用MySQL计算中值的最简单(并且希望不是太慢)的方法是什么?我已经习惯AVG(x)了找到平均值,但我很难找到一种计算中位数的简单方法.现在,我将所有行返回给PHP,进行排序,然后选择中间行,但肯定必须有一些简单的方法在单个MySQL查询中执行此操作.
示例数据:
id | val
--------
1 4
2 7
3 2
4 2
5 9
6 8
7 3
Run Code Online (Sandbox Code Playgroud)
排序上val给出2 2 3 4 7 8 9的,所以中间应该是4,与SELECT AVG(val)这== 5.
我有一系列数字列表,例如:
[0] (0.01, 0.01, 0.02, 0.04, 0.03)
[1] (0.00, 0.02, 0.02, 0.03, 0.02)
[2] (0.01, 0.02, 0.02, 0.03, 0.02)
...
[n] (0.01, 0.00, 0.01, 0.05, 0.03)
Run Code Online (Sandbox Code Playgroud)
我想要做的是有效地计算所有数组元素的列表的每个索引的平均值和标准差.
为了做到这一点,我一直循环遍历数组并将列表的给定索引处的值相加.最后,我将"平均值列表"中的每个值除以n.
为了做标准偏差,我再次循环,现在我已经计算了平均值.
我想避免两次通过阵列,一次为平均值,然后一次为SD(在我有一个意思之后).
是否有一种有效的方法来计算两个值,只通过一次数组?解释语言(例如Perl或Python)或伪代码中的任何代码都可以.
在我们的日志文件中,我们存储请求的响应时间.计算中间响应时间的最有效方法是什么,"75/90/95%的请求是在少于N个时间内提供的"数字等?(我想我的问题的一个变体是:计算一串数字流的中位数和标准差的最佳方法是什么).
我想出的最好的只是阅读所有数字,订购它们然后挑出数字,但这看起来真的很傻.是不是有更聪明的方法?
我们使用Perl,但任何语言的解决方案都可能有所帮助.