From 07d5ddb75559f87a8286e93de0a4757c1aaa7ee4 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 7 Mar 2005 16:08:06 +0400 Subject: [PATCH 1/2] Fix for bug #8464 (AVG returns incorrect result) Actually problem was not in AVG function, but in SUM before the AVG in the query. mysql-test/r/func_group.result: appropriate test result mysql-test/t/func_group.test: test case added strings/decimal.c: in this case we also need to make fsizes equal --- mysql-test/r/func_group.result | 10 ++++++++++ mysql-test/t/func_group.test | 11 +++++++++++ strings/decimal.c | 3 +++ 3 files changed, 24 insertions(+) diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index ea299455364..90757e39612 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -832,3 +832,13 @@ id stddev_pop(value1) var_pop(value1) stddev_samp(value1) var_samp(value1) 1 0.816497 0.666667 1.000000 1.000000 2 1.118034 1.250000 1.290994 1.666667 DROP TABLE t1; +CREATE TABLE t1 (col1 decimal(16,12)); +INSERT INTO t1 VALUES (-5.00000000001),(-5.00000000002),(-5.00000000003),(-5.00000000000),(-5.00000000001),(-5.00000000002); +insert into t1 select * from t1; +select col1,count(col1),sum(col1),avg(col1) from t1 group by col1; +col1 count(col1) sum(col1) avg(col1) +-5.000000000030 2 -10.000000000060 -5.0000000000300000 +-5.000000000020 4 -20.000000000080 -5.0000000000200000 +-5.000000000010 4 -20.000000000040 -5.0000000000100000 +-5.000000000000 2 -10.000000000000 -5.0000000000000000 +DROP TABLE t1; diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index 96fd297dc20..b90fa49db93 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -537,3 +537,14 @@ CREATE TABLE t1 (id int(11),value1 float(10,2)); INSERT INTO t1 VALUES (1,0.00),(1,1.00), (1,2.00), (2,10.00), (2,11.00), (2,12.00), (2,13.00); select id, stddev_pop(value1), var_pop(value1), stddev_samp(value1), var_samp(value1) from t1 group by id; DROP TABLE t1; + +# +# BUG#8464 decimal AVG returns incorrect result +# + +CREATE TABLE t1 (col1 decimal(16,12)); +INSERT INTO t1 VALUES (-5.00000000001),(-5.00000000002),(-5.00000000003),(-5.00000000000),(-5.00000000001),(-5.00000000002); +insert into t1 select * from t1; +select col1,count(col1),sum(col1),avg(col1) from t1 group by col1; +DROP TABLE t1; + diff --git a/strings/decimal.c b/strings/decimal.c index e6d2d9b14dd..90e64ae892f 100644 --- a/strings/decimal.c +++ b/strings/decimal.c @@ -1199,7 +1199,10 @@ int decimal2bin(decimal *from, char *to, int precision, int frac) else if (fsize0 > fsize1 && frac1x) { if (frac0 == frac1) + { frac1x=frac0x; + fsize0= fsize1; + } else { frac1++; From 34ff8fbdb1833128d69b2154174ef1b0260eba2b Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 7 Mar 2005 16:38:05 +0400 Subject: [PATCH 2/2] Fix for bug #8465 (MIN, MAX return incorrect result) mysql-test/r/func_group.result: test result fixed mysql-test/t/func_group.test: testcase added --- mysql-test/r/func_group.result | 13 +++++++++++++ mysql-test/t/func_group.test | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/mysql-test/r/func_group.result b/mysql-test/r/func_group.result index 90757e39612..6b8e729dcf2 100644 --- a/mysql-test/r/func_group.result +++ b/mysql-test/r/func_group.result @@ -842,3 +842,16 @@ col1 count(col1) sum(col1) avg(col1) -5.000000000010 4 -20.000000000040 -5.0000000000100000 -5.000000000000 2 -10.000000000000 -5.0000000000000000 DROP TABLE t1; +create table t1 (col1 decimal(16,12)); +insert into t1 values (-5.00000000001); +insert into t1 values (-5.00000000001); +select col1,sum(col1),max(col1),min(col1) from t1 group by col1; +col1 sum(col1) max(col1) min(col1) +-5.000000000010 -10.000000000020 -5.000000000010 -5.000000000010 +delete from t1; +insert into t1 values (5.00000000001); +insert into t1 values (5.00000000001); +select col1,sum(col1),max(col1),min(col1) from t1 group by col1; +col1 sum(col1) max(col1) min(col1) +5.000000000010 10.000000000020 5.000000000010 5.000000000010 +DROP TABLE t1; diff --git a/mysql-test/t/func_group.test b/mysql-test/t/func_group.test index b90fa49db93..3564918df9c 100644 --- a/mysql-test/t/func_group.test +++ b/mysql-test/t/func_group.test @@ -548,3 +548,16 @@ insert into t1 select * from t1; select col1,count(col1),sum(col1),avg(col1) from t1 group by col1; DROP TABLE t1; +# +# BUG#8465 decimal MIN and MAX return incorrect result +# + +create table t1 (col1 decimal(16,12)); +insert into t1 values (-5.00000000001); +insert into t1 values (-5.00000000001); +select col1,sum(col1),max(col1),min(col1) from t1 group by col1; +delete from t1; +insert into t1 values (5.00000000001); +insert into t1 values (5.00000000001); +select col1,sum(col1),max(col1),min(col1) from t1 group by col1; +DROP TABLE t1;