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);
+ }
+ }
}