Skip to content

Commit 6e4e3d5

Browse files
branch-4.1: [fix](decimalv2) fix wrong result of decimalv2 avg #62346 (#62413)
Cherry-picked from #62346 Co-authored-by: TengJianPing <tengjianping@selectdb.com>
1 parent a653a86 commit 6e4e3d5

3 files changed

Lines changed: 51 additions & 3 deletions

File tree

be/src/exprs/aggregate/aggregate_function_avg.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ struct AggregateFunctionAvgData {
6767
// null is handled in AggregationNode::_get_without_key_result
6868
return static_cast<ResultT>(sum);
6969
}
70-
// to keep the same result with row vesion; see AggregateFunctions::decimalv2_avg_get_value
70+
// DecimalV2 has fixed internal scale=9; its arithmetic operators already
71+
// handle scale correctly, so no external multiplier is needed.
7172
if constexpr (T == TYPE_DECIMALV2 && IsDecimalV2<ResultT>) {
7273
DecimalV2Value decimal_val_count(count, 0);
73-
DecimalV2Value decimal_val_sum(sum * multiplier);
74-
DecimalV2Value cal_ret = decimal_val_sum / decimal_val_count;
74+
DecimalV2Value cal_ret = sum / decimal_val_count;
7575
return cal_ret;
7676
} else {
7777
if constexpr (T == TYPE_DECIMAL256) {

regression-test/data/datatype_p0/decimalv2/test_decimalv2_agg.out

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,19 @@
1717
-- !decimalv2_sum2 --
1818
1000000000000000000.000000000
1919

20+
-- !decimalv2_avg_scale0_groupby --
21+
-1.000000000
22+
-1000000000.000000000
23+
-1111111111.000000000
24+
-1234567890.000000000
25+
-9999999999.000000000
26+
0E-9
27+
1.000000000
28+
1000000000.000000000
29+
1111111111.000000000
30+
1234567890.000000000
31+
9999999999.000000000
32+
33+
-- !decimalv2_avg_scale0_all --
34+
0E-9
35+

regression-test/suites/datatype_p0/decimalv2/test_decimalv2_agg.groovy

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,36 @@ suite("test_decimalv2_agg", "nonConcurrent") {
6161
"""
6262
qt_decimalv2_sum2 " select sum(k1) from test_decimalv2_agg; "
6363

64+
// test avg on decimalv2(10,0) with group by - scale 0 regression
65+
sql """
66+
drop table if exists test_decimalv2_avg_scale0;
67+
"""
68+
sql """
69+
create table test_decimalv2_avg_scale0 (
70+
id int,
71+
data decimalv2(10,0) not null
72+
) distributed by hash(id) buckets 1
73+
properties("replication_num"="1");
74+
"""
75+
sql """
76+
insert into test_decimalv2_avg_scale0 values
77+
(0, 1234567890),
78+
(1, 9999999999),
79+
(2, 1000000000),
80+
(3, 1111111111),
81+
(4, -1234567890),
82+
(5, -9999999999),
83+
(6, -1000000000),
84+
(7, -1111111111),
85+
(8, 1),
86+
(9, 0),
87+
(10, -1);
88+
"""
89+
order_qt_decimalv2_avg_scale0_groupby """
90+
select avg(data) from test_decimalv2_avg_scale0 group by data;
91+
"""
92+
qt_decimalv2_avg_scale0_all """
93+
select avg(data) from test_decimalv2_avg_scale0;
94+
"""
95+
6496
}

0 commit comments

Comments
 (0)