diff --git a/be/src/exprs/aggregate/aggregate_function_avg_weighted.h b/be/src/exprs/aggregate/aggregate_function_avg_weighted.h index c9a4c423d651c9..1eb1c9cd4166bb 100644 --- a/be/src/exprs/aggregate/aggregate_function_avg_weighted.h +++ b/be/src/exprs/aggregate/aggregate_function_avg_weighted.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -76,7 +77,12 @@ struct AggregateFunctionAvgWeightedData { weight_sum = 0.0; } - double get() const { return data_sum / weight_sum; } + double get() const { + if (weight_sum == 0.0) { + return std::numeric_limits::quiet_NaN(); + } + return data_sum / weight_sum; + } double data_sum = 0.0; double weight_sum = 0.0; diff --git a/regression-test/data/query_p0/aggregate/support_type/avg_weighted/avg_weighted.out b/regression-test/data/query_p0/aggregate/support_type/avg_weighted/avg_weighted.out index f7365ee6724c96..dd8b4f7056b32a 100644 --- a/regression-test/data/query_p0/aggregate/support_type/avg_weighted/avg_weighted.out +++ b/regression-test/data/query_p0/aggregate/support_type/avg_weighted/avg_weighted.out @@ -2,3 +2,6 @@ -- !sql_double -- 2.718281828 +-- !sql_zero_weight -- +NaN + diff --git a/regression-test/suites/query_p0/aggregate/support_type/avg_weighted/avg_weighted.groovy b/regression-test/suites/query_p0/aggregate/support_type/avg_weighted/avg_weighted.groovy index f49adef5d8ce7e..755adb4119694c 100644 --- a/regression-test/suites/query_p0/aggregate/support_type/avg_weighted/avg_weighted.groovy +++ b/regression-test/suites/query_p0/aggregate/support_type/avg_weighted/avg_weighted.groovy @@ -43,4 +43,18 @@ suite("avg_weighted") { """ qt_sql_double """select avg_weighted(col_double, weight_double) from d_table;""" + + // weight sum is zero, should return NaN instead of +/-Infinity + sql """ + drop table if exists test_avg_weighted_zero; + """ + sql """ + create table test_avg_weighted_zero (f1 int, f2 int) + distributed BY hash(f1) buckets 1 + properties("replication_num" = "1"); + """ + sql """ + insert into test_avg_weighted_zero values (1, 1), (2, -1); + """ + qt_sql_zero_weight """select avg_weighted(f1, f2) from test_avg_weighted_zero;""" } \ No newline at end of file