【问题标题】:Is there a STDDEV equivalent in Cloud Spanner functions?Cloud Spanner 函数中是否有 STDDEV 等效项?
【发布时间】:2019-10-18 04:51:09
【问题描述】:

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

【问题讨论】:

    标签: google-cloud-spanner


    【解决方案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
    );
    

    根据类型,您可能必须将其强制转换为 double(尤其是 s2)以避免溢出。两者都会出现浮点错误。

    【讨论】:

      【解决方案2】:

      您发送的官方文档中不存在此功能,因此可能仍然不存在。如果您需要类似的东西,您可能应该以编程方式自己计算标准偏差。您有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));
      

      【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2022-10-13
        • 2017-07-10
        • 2021-03-06
        • 1970-01-01
        • 2017-10-24
        • 1970-01-01
        • 2017-08-19
        • 2021-01-20
        • 1970-01-01
        相关资源
        最近更新 更多