Loading mysql-test/r/group_min_max.result +46 −0 Original line number Diff line number Diff line Loading @@ -2307,3 +2307,49 @@ a 2 4 DROP TABLE t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3); INSERT INTO t1 SELECT a + 1, b FROM t1; INSERT INTO t1 SELECT a + 2, b FROM t1; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 12 Using temporary; Using filesort SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) 4 1 3 3 1 3 2 1 3 1 1 3 CREATE INDEX break_it ON t1 (a, b); EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; a MIN(b) MAX(b) 1 1 3 2 1 3 3 1 3 4 1 3 EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by; Using temporary; Using filesort SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) 4 1 3 3 1 3 2 1 3 1 1 3 EXPLAIN SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL break_it 10 NULL 12 Using index SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) AVG(b) 4 1 3 2.0000 3 1 3 2.0000 2 1 3 2.0000 1 1 3 2.0000 DROP TABLE t1; mysql-test/t/group_min_max.test +24 −0 Original line number Diff line number Diff line Loading @@ -888,7 +888,31 @@ SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1; DROP TABLE t1; # # Bug #32268: Indexed queries give bogus MIN and MAX results # CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3); INSERT INTO t1 SELECT a + 1, b FROM t1; INSERT INTO t1 SELECT a + 2, b FROM t1; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; CREATE INDEX break_it ON t1 (a, b); EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; EXPLAIN SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; DROP TABLE t1; sql/sql_select.cc +2 −1 Original line number Diff line number Diff line Loading @@ -10261,7 +10261,8 @@ Next_select_func setup_end_select_func(JOIN *join) /* Set up select_end */ if (table) { if (table->group && tmp_tbl->sum_func_count) if (table->group && tmp_tbl->sum_func_count && !tmp_tbl->precomputed_group_by) { if (table->s->keys) { Loading Loading
mysql-test/r/group_min_max.result +46 −0 Original line number Diff line number Diff line Loading @@ -2307,3 +2307,49 @@ a 2 4 DROP TABLE t1; CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3); INSERT INTO t1 SELECT a + 1, b FROM t1; INSERT INTO t1 SELECT a + 2, b FROM t1; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 ALL NULL NULL NULL NULL 12 Using temporary; Using filesort SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) 4 1 3 3 1 3 2 1 3 1 1 3 CREATE INDEX break_it ON t1 (a, b); EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; a MIN(b) MAX(b) 1 1 3 2 1 3 3 1 3 4 1 3 EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 range NULL break_it 10 NULL 7 Using index for group-by; Using temporary; Using filesort SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) 4 1 3 3 1 3 2 1 3 1 1 3 EXPLAIN SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 index NULL break_it 10 NULL 12 Using index SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; a MIN(b) MAX(b) AVG(b) 4 1 3 2.0000 3 1 3 2.0000 2 1 3 2.0000 1 1 3 2.0000 DROP TABLE t1;
mysql-test/t/group_min_max.test +24 −0 Original line number Diff line number Diff line Loading @@ -888,7 +888,31 @@ SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1; DROP TABLE t1; # # Bug #32268: Indexed queries give bogus MIN and MAX results # CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3); INSERT INTO t1 SELECT a + 1, b FROM t1; INSERT INTO t1 SELECT a + 2, b FROM t1; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; CREATE INDEX break_it ON t1 (a, b); EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a; EXPLAIN SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC; EXPLAIN SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC; DROP TABLE t1;
sql/sql_select.cc +2 −1 Original line number Diff line number Diff line Loading @@ -10261,7 +10261,8 @@ Next_select_func setup_end_select_func(JOIN *join) /* Set up select_end */ if (table) { if (table->group && tmp_tbl->sum_func_count) if (table->group && tmp_tbl->sum_func_count && !tmp_tbl->precomputed_group_by) { if (table->s->keys) { Loading