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

qiaojialin pushed a commit to branch fix_avg_calculation
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit 35f481c2260b5502f6fd7722ee7b13183af47483
Author: qiaojialin <[email protected]>
AuthorDate: Tue Feb 25 09:22:51 2020 +0800

    update avg calculation
---
 .../iotdb/db/query/aggregation/impl/AvgAggrResult.java      |  4 ++--
 .../iotdb/db/query/aggregation/AggregateResultTest.java     | 13 ++++++++-----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java
 
b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java
index dbc677e..a9b9ffa 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/aggregation/impl/AvgAggrResult.java
@@ -104,7 +104,7 @@ public class AvgAggrResult extends AggregateResult {
         throw new IOException(
             String.format("Unsupported data type in aggregation AVG : %s", 
type));
     }
-    avg = avg * ((double) cnt / (cnt + 1)) + (1.0 / (cnt + 1)) * val;
+    avg = avg * ((double) cnt / (cnt + 1)) + val * (1.0 / (cnt + 1));
     cnt++;
   }
 
@@ -116,6 +116,6 @@ public class AvgAggrResult extends AggregateResult {
   @Override
   public void merge(AggregateResult another) {
     AvgAggrResult anotherAvg = (AvgAggrResult) another;
-    avg = (avg * cnt + anotherAvg.avg * anotherAvg.cnt) / (cnt + 
anotherAvg.cnt);
+    avg = avg * ((double) cnt / (cnt + anotherAvg.cnt)) + anotherAvg.avg * 
((double) anotherAvg.cnt / (cnt + anotherAvg.cnt));
   }
 }
diff --git 
a/server/src/test/java/org/apache/iotdb/db/query/aggregation/AggregateResultTest.java
 
b/server/src/test/java/org/apache/iotdb/db/query/aggregation/AggregateResultTest.java
index 698b943..0268b93 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/query/aggregation/AggregateResultTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/query/aggregation/AggregateResultTest.java
@@ -34,13 +34,16 @@ public class AggregateResultTest {
     AggregateResult avgAggrResult1 = 
AggreResultFactory.getAggrResultByName(SQLConstant.AVG, TSDataType.DOUBLE);
     AggregateResult avgAggrResult2 = 
AggreResultFactory.getAggrResultByName(SQLConstant.AVG, TSDataType.DOUBLE);
 
-    Statistics statistics = Statistics.getStatsByType(TSDataType.DOUBLE);
-    statistics.update(1l,1d);
+    Statistics statistics1 = Statistics.getStatsByType(TSDataType.DOUBLE);
+    Statistics statistics2 = Statistics.getStatsByType(TSDataType.DOUBLE);
+    statistics1.update(1l,1d);
+    statistics1.update(2l,1d);
+    statistics2.update(1l,2d);
 
-    avgAggrResult1.updateResultFromStatistics(statistics);
-    avgAggrResult2.updateResultFromStatistics(statistics);
+    avgAggrResult1.updateResultFromStatistics(statistics1);
+    avgAggrResult2.updateResultFromStatistics(statistics2);
     avgAggrResult1.merge(avgAggrResult2);
-    Assert.assertEquals(1d, (double)avgAggrResult1.getResult(), 0.01);
+    Assert.assertEquals(1.333d, (double)avgAggrResult1.getResult(), 0.01);
   }
 
   @Test

Reply via email to