This is an automated email from the ASF dual-hosted git repository.

caogaofei pushed a commit to branch add_more_aggs
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/add_more_aggs by this push:
     new 4b07b4d8d38 add it
4b07b4d8d38 is described below

commit 4b07b4d8d38c08f1248a45e2c9793826167e8630
Author: Beyyes <[email protected]>
AuthorDate: Wed Oct 23 18:45:11 2024 +0800

    add it
---
 .../db/it/IoTDBMultiIDsWithAttributesTableIT.java  | 15 +++++++
 .../aggregation/TableVarianceAccumulator.java      | 48 ++++++++++++++++++++--
 2 files changed, 60 insertions(+), 3 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
index dd2201577e1..ec659eddb42 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiIDsWithAttributesTableIT.java
@@ -1218,6 +1218,21 @@ public class IoTDBMultiIDsWithAttributesTableIT {
     tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
   }
 
+  @Test
+  public void varianceTest() {
+    expectedHeader = buildHeaders(18);
+    sql =
+        "select \n"
+            + 
"round(variance(num),1),round(var_pop(num),1),round(var_samp(num),1),round(stddev(num),1),round(stddev_pop(num),1),round(stddev_samp(num),1),\n"
+            + 
"round(variance(floatnum),1),round(var_pop(floatnum),1),round(var_samp(floatnum),1),round(stddev(floatnum),1),round(stddev_pop(floatnum),1),round(stddev_samp(floatnum),1),\n"
+            + 
"round(variance(doublenum),1),round(var_pop(doublenum),1),round(var_samp(doublenum),1),round(stddev(doublenum),1),round(stddev_pop(doublenum),1),round(stddev_samp(doublenum),1)
 from table0 where device='d2' and level='l4'";
+    retArray =
+        new String[] {
+          
"16.0,10.7,16.0,4.0,3.3,4.0,50.0,33.3,50.0,7.1,5.8,7.1,null,0.0,null,null,0.0,null,",
+        };
+    tableResultSetEqualTest(sql, expectedHeader, retArray, DATABASE_NAME);
+  }
+
   // ==================================================================
   // ============================ Join Test ===========================
   // ==================================================================
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableVarianceAccumulator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableVarianceAccumulator.java
index 4cfb95c016f..6733dfa8d80 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableVarianceAccumulator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableVarianceAccumulator.java
@@ -62,13 +62,13 @@ public class TableVarianceAccumulator implements 
TableAccumulator {
         addIntInput(arguments[0]);
         return;
       case INT64:
-        // addLongInput(arguments[0]);
+        addLongInput(arguments[0]);
         return;
       case FLOAT:
-        // addFloatInput(arguments[0]);
+        addFloatInput(arguments[0]);
         return;
       case DOUBLE:
-        // addDoubleInput(arguments[0]);
+        addDoubleInput(arguments[0]);
         return;
       case TEXT:
       case BLOB:
@@ -184,4 +184,46 @@ public class TableVarianceAccumulator implements 
TableAccumulator {
       m2 += delta * (value - mean);
     }
   }
+
+  private void addLongInput(Column column) {
+    for (int i = 0; i < column.getPositionCount(); i++) {
+      if (column.isNull(i)) {
+        continue;
+      }
+
+      long value = column.getLong(i);
+      count++;
+      double delta = value - mean;
+      mean += delta / count;
+      m2 += delta * (value - mean);
+    }
+  }
+
+  private void addFloatInput(Column column) {
+    for (int i = 0; i < column.getPositionCount(); i++) {
+      if (column.isNull(i)) {
+        continue;
+      }
+
+      float value = column.getFloat(i);
+      count++;
+      double delta = value - mean;
+      mean += delta / count;
+      m2 += delta * (value - mean);
+    }
+  }
+
+  private void addDoubleInput(Column column) {
+    for (int i = 0; i < column.getPositionCount(); i++) {
+      if (column.isNull(i)) {
+        continue;
+      }
+
+      double value = column.getDouble(i);
+      count++;
+      double delta = value - mean;
+      mean += delta / count;
+      m2 += delta * (value - mean);
+    }
+  }
 }

Reply via email to