Loading mysql-test/r/derived.result +9 −0 Original line number Diff line number Diff line Loading @@ -330,3 +330,12 @@ SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MA min max avg 10.00 10.00 10 DROP TABLE t1; create table t1 (a integer, b integer); insert into t1 values (1,4), (2,2),(2,2), (4,1),(4,1),(4,1),(4,1); select distinct sum(b) from t1 group by a; sum(b) 4 select distinct sum(b) from (select a,b from t1) y group by a; sum(b) 4 drop table t1; mysql-test/t/derived.test +10 −0 Original line number Diff line number Diff line Loading @@ -214,3 +214,13 @@ CREATE TABLE `t1` ( `itemid` int(11) NOT NULL default '0', `grpid` varchar(15) N insert into t1 values (128, 'rozn', 2, now(), 10),(128, 'rozn', 1, now(), 10); SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices; DROP TABLE t1; # # DISTINCT over grouped select on subquery in the FROM clause # create table t1 (a integer, b integer); insert into t1 values (1,4), (2,2),(2,2), (4,1),(4,1),(4,1),(4,1); select distinct sum(b) from t1 group by a; select distinct sum(b) from (select a,b from t1) y group by a; drop table t1; sql/sql_lex.cc +4 −1 Original line number Diff line number Diff line Loading @@ -164,7 +164,10 @@ void lex_start(THD *thd, uchar *buf,uint length) void lex_end(LEX *lex) { lex->select_lex.expr_list.delete_elements(); // If error when parsing sql-varargs for (SELECT_LEX *sl= lex->all_selects_list; sl; sl= sl->next_select_in_list()) sl->expr_list.delete_elements(); // If error when parsing sql-varargs x_free(lex->yacc_yyss); x_free(lex->yacc_yyvs); } Loading sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1304,7 +1304,7 @@ JOIN::exec() curr_join->select_distinct=0; /* Each row is unique */ curr_join->join_free(0); /* Free quick selects */ if (select_distinct && ! group_list) if (curr_join->select_distinct && ! curr_join->group_list) { thd->proc_info="Removing duplicates"; if (curr_join->tmp_having) Loading Loading
mysql-test/r/derived.result +9 −0 Original line number Diff line number Diff line Loading @@ -330,3 +330,12 @@ SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MA min max avg 10.00 10.00 10 DROP TABLE t1; create table t1 (a integer, b integer); insert into t1 values (1,4), (2,2),(2,2), (4,1),(4,1),(4,1),(4,1); select distinct sum(b) from t1 group by a; sum(b) 4 select distinct sum(b) from (select a,b from t1) y group by a; sum(b) 4 drop table t1;
mysql-test/t/derived.test +10 −0 Original line number Diff line number Diff line Loading @@ -214,3 +214,13 @@ CREATE TABLE `t1` ( `itemid` int(11) NOT NULL default '0', `grpid` varchar(15) N insert into t1 values (128, 'rozn', 2, now(), 10),(128, 'rozn', 1, now(), 10); SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices; DROP TABLE t1; # # DISTINCT over grouped select on subquery in the FROM clause # create table t1 (a integer, b integer); insert into t1 values (1,4), (2,2),(2,2), (4,1),(4,1),(4,1),(4,1); select distinct sum(b) from t1 group by a; select distinct sum(b) from (select a,b from t1) y group by a; drop table t1;
sql/sql_lex.cc +4 −1 Original line number Diff line number Diff line Loading @@ -164,7 +164,10 @@ void lex_start(THD *thd, uchar *buf,uint length) void lex_end(LEX *lex) { lex->select_lex.expr_list.delete_elements(); // If error when parsing sql-varargs for (SELECT_LEX *sl= lex->all_selects_list; sl; sl= sl->next_select_in_list()) sl->expr_list.delete_elements(); // If error when parsing sql-varargs x_free(lex->yacc_yyss); x_free(lex->yacc_yyvs); } Loading
sql/sql_select.cc +1 −1 Original line number Diff line number Diff line Loading @@ -1304,7 +1304,7 @@ JOIN::exec() curr_join->select_distinct=0; /* Each row is unique */ curr_join->join_free(0); /* Free quick selects */ if (select_distinct && ! group_list) if (curr_join->select_distinct && ! curr_join->group_list) { thd->proc_info="Removing duplicates"; if (curr_join->tmp_having) Loading