| Bug #103852 | intermediate ROLLUP gives incorrect result | ||
|---|---|---|---|
| Submitted: | 29 May 2021 20:02 | Modified: | 30 Jun 2021 11:13 |
| Reporter: | Jochem van Dieten | Email Updates: | |
| Status: | No Feedback | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
| Version: | 8.0.17 | OS: | Other (official Docker image) |
| Assigned to: | CPU Architecture: | x86 | |
| Tags: | cte, rollup | ||
[29 May 2021 20:02]
Jochem van Dieten
[30 May 2021 11:13]
MySQL Verification Team
Thank you for the bug report. Please check with today release 8.0.25:
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.25 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
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 L
Database changed
mysql> CREATE TABLE t1 (c1 integer DEFAULT NULL);
Query OK, 0 rows affected (0.06 sec)
mysql> insert into t1 (c1) values (17295314);
Query OK, 1 row affected (0.01 sec)
mysql> -- correct result when ROLLUP is the last operation
mysql> select 'GROUP_1' as label, count(*) as 'count'
-> from t1
-> group by label with ROLLUP;
+---------+-------+
| label | count |
+---------+-------+
| GROUP_1 | 1 |
| NULL | 1 |
+---------+-------+
2 rows in set (0.01 sec)
mysql> -- incorrect result when ROLLUP is not the last operation
mysql> select IFNULL(label, 'TOTAL') as delay, count
-> from (
-> select 'GROUP_1' as label, count(*) as 'count'
-> from t1
-> group by label with ROLLUP
-> ) intermed;
+---------+-------+
| delay | count |
+---------+-------+
| GROUP_1 | 1 |
| TOTAL | 1 |
+---------+-------+
2 rows in set (0.01 sec)
mysql> WITH intermed AS (
-> select 'GROUP_1' as label, count(*) as 'count'
-> from t1
-> group by label with ROLLUP
-> )
-> select IFNULL(label, 'TOTAL') as delay, count
-> from intermed;
+---------+-------+
| delay | count |
+---------+-------+
| GROUP_1 | 1 |
| TOTAL | 1 |
+---------+-------+
2 rows in set (0.00 sec)
mysql> -- correct: the same final operation without the ROLLUP
mysql> select IFNULL(label, 'TOTAL') as delay, count
-> from (
-> select 'GROUP_1' as label, 1 as 'count'
-> UNION ALL
-> select null as label, 1 as 'count'
-> ) intermed;
+---------+-------+
| delay | count |
+---------+-------+
| GROUP_1 | 1 |
| TOTAL | 1 |
+---------+-------+
2 rows in set (0.00 sec)
mysql>
[1 Jul 2021 1:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
