我正在尝试从包含数百万行的表中查找值的几何平均值。对于那些不知道的人,要找到几何平均值,请将每个值相互乘以,然后除以行数。
您可能已经发现了问题;这个数字相乘的数字很快就会超过系统允许的最大值。我找到了一个使用自然对数的出色解决方案。
http://timothychenallen.blogspot.com/2006/03/sql-calculating-geometric-mean-geomean.html
但这让我想知道同样的问题是否也适用于算术平均值?如果您有 N 条记录,并且 N 非常大,则运行总和也可能会超过系统最大值。
那么 RDMS 如何在查询期间计算平均值?
最佳答案
我不知道 RDBMS 中算术平均值的确切实现,您也没有在原始问题中指定一个。但 RDBMS 不需要对一列中的一百万行求和来获得算术平均值。考虑以下总结:
sum = (x1 + x2 + x3 + ... + x1000000)
那么平均值可以写为
mean = sum / N = (x1 + x2 + x3 + ... + x1000000) / N, for N = 1,000,000
但是这个表达式可以分解成这样的部分:
mean = [(x1 + x2 + x3) / N ] + [(x4 + x5 + x6) / N] + ...
换句话来说,RDBMS 可以简单地扫描一列中的百万行并逐段查找平均值,而无需担心溢出的风险。并且由于列中的每个数字可能都在存储它的类型的范围内,因此平均值本身不会溢出。
关于sql - Average 函数在关系数据库中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32194754/