Cloud Spanner功能中是否有等效的STDDEV?

时间:2019-10-18 04:51:09

标签: google-cloud-spanner

我在the documentation中看不到它;可能是我没有注意到的现有功能的一部分,还是有其他可用方式?

3 个答案:

答案 0 :(得分:1)

正如Andrei Tigau提到的,尚不支持STDDEV。也就是说,您需要分两次计算。假设您对YourTable的x栏感兴趣,

SELECT SQRT(SUM(POW(x - avg, 2)/(n-1)))
FROM (SELECT AVG(x) AS avg, COUNT(*) AS n FROM YourTable)
  CROSS JOIN YourTable;

您也可以尝试采用一种解决方案。

SELECT SQRT(s2/(n-1) - POW(s/n, 2))
FROM (
  SELECT COUNT(*) AS n, SUM(x) AS s, SUM(x*x) AS s2
  FROM YourTable
);

取决于类型,您可能必须将其强制转换为两倍(尤其是s2),以避免溢出。两者都会遭受浮点错误。

答案 1 :(得分:0)

此功能在您发送的官方文档中不存在,因此可能仍然不存在。如果您需要类似的东西,则可能应该以编程方式自己计算标准偏差。您有AVG function可以帮助您至少获得中值,这将有助于计算标准偏差,并提供COUNT函数以获取条目数。

double standardDeviation ; // standard deviation
double sumOfDiffrences = 0; 

for ( int i = 0; i < count; i++ ){

sumOfDiffrences = sumOfDiffrences + pow((entry(i)-avg),2); // entry(i) is an entry of the column you want to create the S.D.

}
standardDeviation = sqrt((sumOfDiffrences)/(count-1));

答案 2 :(得分:0)