Bug #80310 | Regression for a grouping query with DISTINCT | ||
---|---|---|---|
Submitted: | 9 Feb 2016 3:55 | Modified: | 12 Dec 2016 1:30 |
Reporter: | Igor Babaev | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
Version: | 5.7, 5.6.29, 5.7.11 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | regression |
[9 Feb 2016 3:55]
Igor Babaev
[9 Feb 2016 4:40]
MySQL Verification Team
Hello Igor, Thank you for the report and test case. Observed that 5.6.29/5.7.11 are affected. Thanks, Umesh
[9 Feb 2016 4:40]
MySQL Verification Team
-- 5.6.29/5.7.11 - affected -- 5.6.29 [umshastr@hod03]/export/umesh/server/binaries/mysql-5.6.29: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.29 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 0 | +---+ 1 row in set (0.00 sec) mysql> -- 5.7.11 [umshastr@hod03]/export/umesh/server/binaries/mysql-5.7.11: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.11 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database test; Query OK, 1 row affected (0.00 sec) mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.01 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 0 | +---+ 1 row in set (0.00 sec) mysql>
[9 Feb 2016 4:41]
MySQL Verification Team
-- 5.5 and below versions not affected -- 4.1.25 [umshastr@hod03]/export/umesh/server/binaries/mysql-4.1.25: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version: 4.1.25-classic Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 4 | | 3 | +---+ 2 rows in set (0.02 sec) mysql> -- 5.0.96 [umshastr@hod03]/export/umesh/server/binaries/mysql-5.0.96: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.96 MySQL Community Server (GPL) Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 4 | | 3 | +---+ 2 rows in set (0.00 sec) mysql> -- 5.1.77 [umshastr@hod03]/export/umesh/server/binaries/mysql-5.1.77: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.77 Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 4 | | 3 | +---+ 2 rows in set (0.07 sec) mysql> -- 5.5.49 [umshastr@hod03]/export/umesh/server/binaries/mysql-advanced-5.5.49: bin/mysql -uroot -S /tmp/mysql_ushastry.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.49-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use test Database changed mysql> create table t1 (a int, b int); Query OK, 0 rows affected (0.00 sec) mysql> insert into t1 values (1,3), (2,4), (1,5), (1,3), (2,1), (1,5), (1,7), (3,1), (3,2), (3,1), (2,4); Query OK, 11 rows affected (0.00 sec) Records: 11 Duplicates: 0 Warnings: 0 mysql> SELECT DISTINCT (COUNT(distinct b) + 1) AS c FROM t1 GROUP BY a; +---+ | c | +---+ | 4 | | 3 | +---+ 2 rows in set (0.00 sec) mysql>
[12 Dec 2016 1:30]
Paul DuBois
Posted by developer: Noted in 5.6.36, 5.7.18, 8.0.1. Queries that used an aggregate function with DISTINCT could produce incorrect results.