Description:
After an upgrade from MySQL Community Server 8.0.17 to 8.0.18 the aggregation function "SUM(xx)" together with a "GROUP BY" (I guess as well other functions) returns in some cases random numbers.
All tests (final exemple provided here) were performed on Windows 10 (1909 Build 18363.476).
Some strange numbers was seen as well on Windows Server 2016 Standard and Debian 9 (x64) but the systems was not used for further testing.
How to repeat:
CREATE TABLE t_test (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
ym varchar(12) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
vb double DEFAULT NULL,
vc double DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t_test VALUES ('543', '201912', '235.0431370770208', null);
INSERT INTO t_test VALUES ('573', '201912', '76.5', '68.85000000000001');
INSERT INTO t_test VALUES ('582', '201912', '340', null);
INSERT INTO t_test VALUES ('608', '201912', '54.42', '48.978');
INSERT INTO t_test VALUES ('752', '201912', '140', null);
INSERT INTO t_test VALUES ('1205', '201912', '121.5', '109.35000000000001');
INSERT INTO t_test VALUES ('2988', '201912', null, null);
INSERT INTO t_test VALUES ('3168', '201912', null, null);
INSERT INTO t_test VALUES ('21299', '201912', '179.17000000000002', null);
INSERT INTO t_test VALUES ('66901', '201912', '21528.03', null);
Run a couple of times the select statement:
SELECT ym, ROUND(SUM(vb)), ROUND(SUM(vc)) FROM t_test GROUP BY ym;
Suggested fix:
A downgrade to version 8.0.17 has solved the problem for my use case.
As well it is possible to change the select statement to the following:
SELECT CAST(ym AS UNSIGNED), ROUND(SUM(vb)), ROUND(SUM(vc)) FROM t_test GROUP BY CAST(ym AS UNSIGNED);