config root man

Current Path : /home/usr.opt/mysql57/mysql-test/r/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/r/group_min_max.result

drop table if exists t1;
create table t1 (
a1 char(64), a2 char(64), b char(16), c char(16) not null, d char(16), dummy char(248) default ' '
);
insert into t1 (a1, a2, b, c, d) values
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4'),
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4'),
('d','a','a','a411','xy1'),('d','a','a','b411','xy2'),('d','a','a','c411','xy3'),('d','a','a','d411','xy4'),
('d','a','b','e412','xy1'),('d','a','b','f412','xy2'),('d','a','b','g412','xy3'),('d','a','b','h412','xy4'),
('d','b','a','i421','xy1'),('d','b','a','j421','xy2'),('d','b','a','k421','xy3'),('d','b','a','l421','xy4'),
('d','b','b','m422','xy1'),('d','b','b','n422','xy2'),('d','b','b','o422','xy3'),('d','b','b','p422','xy4');
create index idx_t1_0 on t1 (a1);
create index idx_t1_1 on t1 (a1,a2,b,c);
create index idx_t1_2 on t1 (a1,a2,b);
analyze table t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	Table is already up to date
drop table if exists t2;
create table t2 (
a1 char(64), a2 char(64) not null, b char(16), c char(16), d char(16), dummy char(248) default ' '
);
insert into t2 select * from t1;
insert into t2 (a1, a2, b, c, d) values
('a','a',NULL,'a777','xyz'),('a','a',NULL,'a888','xyz'),('a','a',NULL,'a999','xyz'),
('a','a','a',NULL,'xyz'),
('a','a','b',NULL,'xyz'),
('a','b','a',NULL,'xyz'),
('c','a',NULL,'c777','xyz'),('c','a',NULL,'c888','xyz'),('c','a',NULL,'c999','xyz'),
('d','b','b',NULL,'xyz'),
('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),
('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz'),
('a','a',NULL,'a777','xyz'),('a','a',NULL,'a888','xyz'),('a','a',NULL,'a999','xyz'),
('a','a','a',NULL,'xyz'),
('a','a','b',NULL,'xyz'),
('a','b','a',NULL,'xyz'),
('c','a',NULL,'c777','xyz'),('c','a',NULL,'c888','xyz'),('c','a',NULL,'c999','xyz'),
('d','b','b',NULL,'xyz'),
('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),('e','a','a',NULL,'xyz'),
('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz'),('e','a','b',NULL,'xyz');
create index idx_t2_0 on t2 (a1);
create index idx_t2_1 on t2 (a1,a2,b,c);
create index idx_t2_2 on t2 (a1,a2,b);
analyze table t2;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	Table is already up to date
drop table if exists t3;
create table t3 (
a1 char(1), a2 char(1), b char(1), c char(4) not null, d char(3), dummy char(1) default ' '
);
insert into t3 (a1, a2, b, c, d) values
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4');
insert into t3 (a1, a2, b, c, d) values
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4');
insert into t3 (a1, a2, b, c, d) values
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4');
insert into t3 (a1, a2, b, c, d) values
('a','a','a','a111','xy1'),('a','a','a','b111','xy2'),('a','a','a','c111','xy3'),('a','a','a','d111','xy4'),
('a','a','b','e112','xy1'),('a','a','b','f112','xy2'),('a','a','b','g112','xy3'),('a','a','b','h112','xy4'),
('a','b','a','i121','xy1'),('a','b','a','j121','xy2'),('a','b','a','k121','xy3'),('a','b','a','l121','xy4'),
('a','b','b','m122','xy1'),('a','b','b','n122','xy2'),('a','b','b','o122','xy3'),('a','b','b','p122','xy4'),
('b','a','a','a211','xy1'),('b','a','a','b211','xy2'),('b','a','a','c211','xy3'),('b','a','a','d211','xy4'),
('b','a','b','e212','xy1'),('b','a','b','f212','xy2'),('b','a','b','g212','xy3'),('b','a','b','h212','xy4'),
('b','b','a','i221','xy1'),('b','b','a','j221','xy2'),('b','b','a','k221','xy3'),('b','b','a','l221','xy4'),
('b','b','b','m222','xy1'),('b','b','b','n222','xy2'),('b','b','b','o222','xy3'),('b','b','b','p222','xy4'),
('c','a','a','a311','xy1'),('c','a','a','b311','xy2'),('c','a','a','c311','xy3'),('c','a','a','d311','xy4'),
('c','a','b','e312','xy1'),('c','a','b','f312','xy2'),('c','a','b','g312','xy3'),('c','a','b','h312','xy4'),
('c','b','a','i321','xy1'),('c','b','a','j321','xy2'),('c','b','a','k321','xy3'),('c','b','a','l321','xy4'),
('c','b','b','m322','xy1'),('c','b','b','n322','xy2'),('c','b','b','o322','xy3'),('c','b','b','p322','xy4');
create index idx_t3_0 on t3 (a1);
create index idx_t3_1 on t3 (a1,a2,b,c);
create index idx_t3_2 on t3 (a1,a2,b);
analyze table t3;
Table	Op	Msg_type	Msg_text
test.t3	analyze	status	Table is already up to date
explain select a1, min(a2) from t1 group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,min(`test`.`t1`.`a2`) AS `min(a2)` from `test`.`t1` group by `test`.`t1`.`a1`
explain select a1, max(a2) from t1 group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	65	NULL	5	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`a2`) AS `max(a2)` from `test`.`t1` group by `test`.`t1`.`a1`
explain select a1, min(a2), max(a2) from t1 group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,min(`test`.`t1`.`a2`) AS `min(a2)`,max(`test`.`t1`.`a2`) AS `max(a2)` from `test`.`t1` group by `test`.`t1`.`a1`
explain select a1, a2, b, min(c), max(c) from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,max(c),min(c) from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,max(c),min(c) from t2 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	#	NULL	#	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select min(a2), a1, max(a2), min(a2), a1 from t1 group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select min(`test`.`t1`.`a2`) AS `min(a2)`,`test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`a2`) AS `max(a2)`,min(`test`.`t1`.`a2`) AS `min(a2)`,`test`.`t1`.`a1` AS `a1` from `test`.`t1` group by `test`.`t1`.`a1`
explain select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by a1, a2, b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,`test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`c`) AS `max(c)`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`a2` AS `a2`,max(`test`.`t1`.`c`) AS `max(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select min(a2) from t1 group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select min(`test`.`t1`.`a2`) AS `min(a2)` from `test`.`t1` group by `test`.`t1`.`a1`
explain select a2, min(c), max(c) from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a2` AS `a2`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
select a1, min(a2) from t1 group by a1;
a1	min(a2)
a	a
b	a
c	a
d	a
select a1, max(a2) from t1 group by a1;
a1	max(a2)
a	b
b	b
c	b
d	b
select a1, min(a2), max(a2) from t1 group by a1;
a1	min(a2)	max(a2)
a	a	b
b	a	b
c	a	b
d	a	b
select a1, a2, b, min(c), max(c) from t1 group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,max(c),min(c) from t1 group by a1,a2,b;
a1	a2	b	max(c)	min(c)
a	a	a	d111	a111
a	a	b	h112	e112
a	b	a	l121	i121
a	b	b	p122	m122
b	a	a	d211	a211
b	a	b	h212	e212
b	b	a	l221	i221
b	b	b	p222	m222
c	a	a	d311	a311
c	a	b	h312	e312
c	b	a	l321	i321
c	b	b	p322	m322
d	a	a	d411	a411
d	a	b	h412	e412
d	b	a	l421	i421
d	b	b	p422	m422
select a1,a2,b,max(c),min(c) from t2 group by a1,a2,b;
a1	a2	b	max(c)	min(c)
a	a	NULL	a999	a777
a	a	a	d111	a111
a	a	b	h112	e112
a	b	a	l121	i121
a	b	b	p122	m122
b	a	a	d211	a211
b	a	b	h212	e212
b	b	a	l221	i221
b	b	b	p222	m222
c	a	NULL	c999	c777
c	a	a	d311	a311
c	a	b	h312	e312
c	b	a	l321	i321
c	b	b	p322	m322
d	a	a	d411	a411
d	a	b	h412	e412
d	b	a	l421	i421
d	b	b	p422	m422
e	a	a	NULL	NULL
e	a	b	NULL	NULL
select min(a2), a1, max(a2), min(a2), a1 from t1 group by a1;
min(a2)	a1	max(a2)	min(a2)	a1
a	a	b	a	a
a	b	b	a	b
a	c	b	a	c
a	d	b	a	d
select a1, b, min(c), a1, max(c), b, a2, max(c), max(c) from t1 group by a1, a2, b;
a1	b	min(c)	a1	max(c)	b	a2	max(c)	max(c)
a	a	a111	a	d111	a	a	d111	d111
a	b	e112	a	h112	b	a	h112	h112
a	a	i121	a	l121	a	b	l121	l121
a	b	m122	a	p122	b	b	p122	p122
b	a	a211	b	d211	a	a	d211	d211
b	b	e212	b	h212	b	a	h212	h212
b	a	i221	b	l221	a	b	l221	l221
b	b	m222	b	p222	b	b	p222	p222
c	a	a311	c	d311	a	a	d311	d311
c	b	e312	c	h312	b	a	h312	h312
c	a	i321	c	l321	a	b	l321	l321
c	b	m322	c	p322	b	b	p322	p322
d	a	a411	d	d411	a	a	d411	d411
d	b	e412	d	h412	b	a	h412	h412
d	a	i421	d	l421	a	b	l421	l421
d	b	m422	d	p422	b	b	p422	p422
select min(a2) from t1 group by a1;
min(a2)
a
a
a
a
select a2, min(c), max(c) from t1 group by a1,a2,b;
a2	min(c)	max(c)
a	a111	d111
a	e112	h112
b	i121	l121
b	m122	p122
a	a211	d211
a	e212	h212
b	i221	l221
b	m222	p222
a	a311	d311
a	e312	h312
b	i321	l321
b	m322	p322
a	a411	d411
a	e412	h412
b	i421	l421
b	m422	p422
explain select a1,a2,b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` < 'd') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where a1 >= 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` >= 'b') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a1` < 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1, max(c)            from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a1` < 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where a1 >= 'c' or a2 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a2` < 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`a1` = 'z') or (`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`a1` = 'z') or (`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,min(c),max(c)      from t1 where a1 >= 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` >= 'b') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,  max(c)           from t1 where a1 in ('a','b','d') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` in ('a','b','d')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t2 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`a1` < 'd') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`a1` < 'd') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where a1 >= 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`a1` >= 'b') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a1` < 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1, max(c)            from t2 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a1` < 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where a1 >= 'c' or a2 < 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a2` < 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a1` = 'z') or (`test`.`t2`.`a1` = 'b') or (`test`.`t2`.`a1` = 'd')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a1` = 'z') or (`test`.`t2`.`a1` = 'b') or (`test`.`t2`.`a1` = 'd')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (((`test`.`t2`.`a1` = 'b') or (`test`.`t2`.`a1` = 'd') or (`test`.`t2`.`a1` = 'a') or (`test`.`t2`.`a1` = 'c')) and (`test`.`t2`.`a2` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (((`test`.`t2`.`a1` = 'b') or (`test`.`t2`.`a1` = 'd') or (`test`.`t2`.`a1` = 'a') or (`test`.`t2`.`a1` = 'c')) and (`test`.`t2`.`a2` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,min(c),max(c)      from t2 where a1 >= 'b' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`a1` >= 'b') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,  max(c)           from t2 where a1 in ('a','b','d') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`a1` in ('a','b','d')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
select a1,a2,b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
select a1,a2,b,min(c),max(c) from t1 where a1 >= 'b' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1, max(c)            from t1 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
a1	max(c)
a	d111
a	h112
a	l121
a	p122
c	d311
c	h312
c	l321
c	p322
d	d411
d	h412
d	l421
d	p422
select a1,a2,b,min(c),max(c) from t1 where a1 >= 'c' or a2 < 'b' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	d111
a	a	b	e112	h112
b	a	a	a211	d211
b	a	b	e212	h212
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
a1	a2	b	max(c)
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
a1	a2	b	max(c)
a	b	a	l121
a	b	b	p122
b	b	a	l221
b	b	b	p222
c	b	a	l321
c	b	b	p322
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	b	a	i121	l121
a	b	b	m122	p122
b	b	a	i221	l221
b	b	b	m222	p222
c	b	a	i321	l321
c	b	b	m322	p322
d	b	a	i421	l421
d	b	b	m422	p422
select a1,min(c),max(c)      from t1 where a1 >= 'b' group by a1,a2,b;
a1	min(c)	max(c)
b	a211	d211
b	e212	h212
b	i221	l221
b	m222	p222
c	a311	d311
c	e312	h312
c	i321	l321
c	m322	p322
d	a411	d411
d	e412	h412
d	i421	l421
d	m422	p422
select a1,  max(c)           from t1 where a1 in ('a','b','d') group by a1,a2,b;
a1	max(c)
a	d111
a	h112
a	l121
a	p122
b	d211
b	h212
b	l221
b	p222
d	d411
d	h412
d	l421
d	p422
select a1,a2,b,       max(c) from t2 where a1 < 'd' group by a1,a2,b;
a1	a2	b	max(c)
a	a	NULL	a999
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
select a1,a2,b,min(c),max(c) from t2 where a1 < 'd' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	NULL	c777	c999
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
select a1,a2,b,min(c),max(c) from t2 where a1 >= 'b' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	NULL	c777	c999
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
e	a	a	NULL	NULL
e	a	b	NULL	NULL
select a1,a2,b,       max(c) from t2 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
a1	a2	b	max(c)
a	a	NULL	a999
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
e	a	a	NULL
e	a	b	NULL
select a1, max(c)            from t2 where a1 >= 'c' or a1 < 'b' group by a1,a2,b;
a1	max(c)
a	a999
a	d111
a	h112
a	l121
a	p122
c	c999
c	d311
c	h312
c	l321
c	p322
d	d411
d	h412
d	l421
d	p422
e	NULL
e	NULL
select a1,a2,b,min(c),max(c) from t2 where a1 >= 'c' or a2 < 'b' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
a	a	a	a111	d111
a	a	b	e112	h112
b	a	a	a211	d211
b	a	b	e212	h212
c	a	NULL	c777	c999
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
e	a	a	NULL	NULL
e	a	b	NULL	NULL
select a1,a2,b,       max(c) from t2 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
a1	a2	b	max(c)
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where a1 = 'z' or a1 = 'b' or a1 = 'd' group by a1,a2,b;
a1	a2	b	min(c)	max(c)
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
a1	a2	b	max(c)
a	b	a	l121
a	b	b	p122
b	b	a	l221
b	b	b	p222
c	b	a	l321
c	b	b	p322
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	b	a	i121	l121
a	b	b	m122	p122
b	b	a	i221	l221
b	b	b	m222	p222
c	b	a	i321	l321
c	b	b	m322	p322
d	b	a	i421	l421
d	b	b	m422	p422
select a1,min(c),max(c)      from t2 where a1 >= 'b' group by a1,a2,b;
a1	min(c)	max(c)
b	a211	d211
b	e212	h212
b	i221	l221
b	m222	p222
c	c777	c999
c	a311	d311
c	e312	h312
c	i321	l321
c	m322	p322
d	a411	d411
d	e412	h412
d	i421	l421
d	m422	p422
e	NULL	NULL
e	NULL	NULL
select a1,  max(c)           from t2 where a1 in ('a','b','d') group by a1,a2,b;
a1	max(c)
a	a999
a	d111
a	h112
a	l121
a	p122
b	d211
b	h212
b	l221
b	p222
d	d411
d	h412
d	l421
d	p422
explain select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'b') and (`test`.`t1`.`a2` = 'a')) group by `test`.`t1`.`a1`
explain select a1,max(c),min(c)      from t1 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,max(`test`.`t1`.`c`) AS `max(c)`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'b') and (`test`.`t1`.`a2` = 'a')) group by `test`.`t1`.`a1`
explain select a1,a2,b,       max(c) from t1 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	9	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`b` = 'b') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c),max(c) from t1 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	9	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`b` = 'b') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2, max(c)         from t1 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	9	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`b` = 'b') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'b') and (`test`.`t2`.`a2` = 'a')) group by `test`.`t2`.`a1`
explain select a1,max(c),min(c)      from t2 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,max(`test`.`t2`.`c`) AS `max(c)`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'b') and (`test`.`t2`.`a2` = 'a')) group by `test`.`t2`.`a1`
explain select a1,a2,b,       max(c) from t2 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`b` = 'b') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c),max(c) from t2 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`b` = 'b') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2, max(c)         from t2 where (b = 'b') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`b` = 'b') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t3	NULL	range	idx_t3_0,idx_t3_1,idx_t3_2	idx_t3_1	6	NULL	4	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t3`.`a1` AS `a1`,`test`.`t3`.`a2` AS `a2`,`test`.`t3`.`b` AS `b`,max(`test`.`t3`.`c`) AS `max(c)`,min(`test`.`t3`.`c`) AS `min(c)` from `test`.`t3` where ((`test`.`t3`.`b` = 'b') and (`test`.`t3`.`a2` = 'a')) group by `test`.`t3`.`a1`
explain select a1,max(c),min(c)      from t3 where (a2 = 'a') and (b = 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t3	NULL	range	idx_t3_0,idx_t3_1,idx_t3_2	idx_t3_1	6	NULL	4	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t3`.`a1` AS `a1`,max(`test`.`t3`.`c`) AS `max(c)`,min(`test`.`t3`.`c`) AS `min(c)` from `test`.`t3` where ((`test`.`t3`.`b` = 'b') and (`test`.`t3`.`a2` = 'a')) group by `test`.`t3`.`a1`
select a1,a2,b,max(c),min(c) from t1 where (a2 = 'a') and (b = 'b') group by a1;
a1	a2	b	max(c)	min(c)
a	a	b	h112	e112
b	a	b	h212	e212
c	a	b	h312	e312
d	a	b	h412	e412
select a1,max(c),min(c)      from t1 where (a2 = 'a') and (b = 'b') group by a1;
a1	max(c)	min(c)
a	h112	e112
b	h212	e212
c	h312	e312
d	h412	e412
select a1,a2,b,       max(c) from t1 where (b = 'b') group by a1,a2;
a1	a2	b	max(c)
a	a	b	h112
a	b	b	p122
b	a	b	h212
b	b	b	p222
c	a	b	h312
c	b	b	p322
d	a	b	h412
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (b = 'b') group by a1,a2;
a1	a2	b	min(c)	max(c)
a	a	b	e112	h112
a	b	b	m122	p122
b	a	b	e212	h212
b	b	b	m222	p222
c	a	b	e312	h312
c	b	b	m322	p322
d	a	b	e412	h412
d	b	b	m422	p422
select a1,a2, max(c)         from t1 where (b = 'b') group by a1,a2;
a1	a2	max(c)
a	a	h112
a	b	p122
b	a	h212
b	b	p222
c	a	h312
c	b	p322
d	a	h412
d	b	p422
select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') group by a1;
a1	a2	b	max(c)	min(c)
a	a	b	h112	e112
b	a	b	h212	e212
c	a	b	h312	e312
d	a	b	h412	e412
e	a	b	NULL	NULL
select a1,max(c),min(c)      from t2 where (a2 = 'a') and (b = 'b') group by a1;
a1	max(c)	min(c)
a	h112	e112
b	h212	e212
c	h312	e312
d	h412	e412
e	NULL	NULL
select a1,a2,b,       max(c) from t2 where (b = 'b') group by a1,a2;
a1	a2	b	max(c)
a	a	b	h112
a	b	b	p122
b	a	b	h212
b	b	b	p222
c	a	b	h312
c	b	b	p322
d	a	b	h412
d	b	b	p422
e	a	b	NULL
select a1,a2,b,min(c),max(c) from t2 where (b = 'b') group by a1,a2;
a1	a2	b	min(c)	max(c)
a	a	b	e112	h112
a	b	b	m122	p122
b	a	b	e212	h212
b	b	b	m222	p222
c	a	b	e312	h312
c	b	b	m322	p322
d	a	b	e412	h412
d	b	b	m422	p422
e	a	b	NULL	NULL
select a1,a2, max(c)         from t2 where (b = 'b') group by a1,a2;
a1	a2	max(c)
a	a	h112
a	b	p122
b	a	h212
b	b	p222
c	a	h312
c	b	p322
d	a	h412
d	b	p422
e	a	NULL
select a1,a2,b,max(c),min(c) from t3 where (a2 = 'a') and (b = 'b') group by a1;
a1	a2	b	max(c)	min(c)
a	a	b	h112	e112
b	a	b	h212	e212
c	a	b	h312	e312
select a1,max(c),min(c)      from t3 where (a2 = 'a') and (b = 'b') group by a1;
a1	max(c)	min(c)
a	h112	e112
b	h212	e212
c	h312	e312
explain select a1,a2,b,min(c) from t2 where (a2 = 'a') and b is NULL group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`a2` = 'a') and isnull(`test`.`t2`.`b`)) group by `test`.`t2`.`a1`
explain select a1,a2,b,max(c) from t2 where (a2 = 'a') and b is NULL group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`a2` = 'a') and isnull(`test`.`t2`.`b`)) group by `test`.`t2`.`a1`
explain select a1,a2,b,min(c) from t2 where b is NULL group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where isnull(`test`.`t2`.`b`) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,max(c) from t2 where b is NULL group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where isnull(`test`.`t2`.`b`) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where isnull(`test`.`t2`.`b`) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where isnull(`test`.`t2`.`b`) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
select a1,a2,b,min(c) from t2 where (a2 = 'a') and b is NULL group by a1;
a1	a2	b	min(c)
a	a	NULL	a777
c	a	NULL	c777
select a1,a2,b,max(c) from t2 where (a2 = 'a') and b is NULL group by a1;
a1	a2	b	max(c)
a	a	NULL	a999
c	a	NULL	c999
select a1,a2,b,min(c) from t2 where b is NULL group by a1,a2;
a1	a2	b	min(c)
a	a	NULL	a777
c	a	NULL	c777
select a1,a2,b,max(c) from t2 where b is NULL group by a1,a2;
a1	a2	b	max(c)
a	a	NULL	a999
c	a	NULL	c999
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
c	a	NULL	c777	c999
select a1,a2,b,min(c),max(c) from t2 where b is NULL group by a1,a2;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
c	a	NULL	c777	c999
explain select a1,a2,b,       max(c) from t1 where (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	#	33.33	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` > 'b1') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` > 'b1') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (c > 'f123') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	33.33	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` > 'f123') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c > 'f123') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` > 'f123') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (c < 'a0') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` < 'a0') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c < 'a0') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` < 'a0') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (c < 'k321') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` < 'k321') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c < 'k321') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`c` < 'k321') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` < 'a0') or (`test`.`t1`.`c` > 'b1')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` < 'a0') or (`test`.`t1`.`c` > 'b1')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t1 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	55.55	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` > 'b1') or (`test`.`t1`.`c` <= 'g1')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	55.55	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` > 'b1') or (`test`.`t1`.`c` <= 'g1')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c > 'b111') and (c <= 'g112') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` > 'b111') and (`test`.`t1`.`c` <= 'g112')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c < 'c5') or (c = 'g412') or (c = 'k421') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` < 'c5') or (`test`.`t1`.`c` = 'g412') or (`test`.`t1`.`c` = 'k421')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`c` > 'b111') and (`test`.`t1`.`c` <= 'g112')) or ((`test`.`t1`.`c` > 'd000') and (`test`.`t1`.`c` <= 'i110'))) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (c between 'b111' and 'g112') or (c between 'd000' and 'i110') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`c` between 'b111' and 'g112') or (`test`.`t1`.`c` between 'd000' and 'i110')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,       max(c) from t2 where (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	33.33	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` > 'b1') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` > 'b1') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (c > 'f123') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	33.33	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` > 'f123') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c > 'f123') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` > 'f123') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (c < 'a0') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` < 'a0') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c < 'a0') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` < 'a0') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (c < 'k321') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` < 'k321') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c < 'k321') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (`test`.`t2`.`c` < 'k321') group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` < 'a0') or (`test`.`t2`.`c` > 'b1')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` < 'a0') or (`test`.`t2`.`c` > 'b1')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,       max(c) from t2 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	55.55	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` > 'b1') or (`test`.`t2`.`c` <= 'g1')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` > 'b1') or (`test`.`t2`.`c` <= 'g1')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c > 'b111') and (c <= 'g112') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` > 'b111') and (`test`.`t2`.`c` <= 'g112')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (c < 'c5') or (c = 'g412') or (c = 'k421') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` < 'c5') or (`test`.`t2`.`c` = 'g412') or (`test`.`t2`.`c` = 'k421')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (((`test`.`t2`.`c` > 'b111') and (`test`.`t2`.`c` <= 'g112')) or ((`test`.`t2`.`c` > 'd000') and (`test`.`t2`.`c` <= 'i110'))) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
select a1,a2,b,       max(c) from t1 where (c > 'b1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	b111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	b211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where (c > 'f123') group by a1,a2,b;
a1	a2	b	max(c)
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (c > 'f123') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	b	g112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	b	f212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	b	f312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	b	f412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where (c < 'a0') group by a1,a2,b;
a1	a2	b	max(c)
select a1,a2,b,min(c),max(c) from t1 where (c < 'a0') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
select a1,a2,b,       max(c) from t1 where (c < 'k321') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	k121
b	a	a	d211
b	a	b	h212
b	b	a	k221
c	a	a	d311
c	a	b	h312
c	b	a	j321
d	a	a	d411
d	a	b	h412
d	b	a	j421
select a1,a2,b,min(c),max(c) from t1 where (c < 'k321') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	k121
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	k221
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	j321
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	j421
select a1,a2,b,       max(c) from t1 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	b111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	b211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t1 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t1 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,min(c),max(c) from t1 where (c > 'b111') and (c <= 'g112') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	g112
b	a	a	b211	d211
b	a	b	e212	f212
c	a	a	b311	d311
c	a	b	e312	f312
d	a	a	b411	d411
d	a	b	e412	f412
select a1,a2,b,min(c),max(c) from t1 where (c < 'c5') or (c = 'g412') or (c = 'k421') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	a111	c111
b	a	a	a211	c211
c	a	a	a311	c311
d	a	a	a411	c411
d	a	b	g412	g412
d	b	a	k421	k421
select a1,a2,b,min(c),max(c) from t1 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	h112
b	a	a	b211	d211
b	a	b	e212	h212
c	a	a	b311	d311
c	a	b	e312	h312
d	a	a	b411	d411
d	a	b	e412	h412
select a1,a2,b,min(c),max(c) from t1 where (c between 'b111' and 'g112') or (c between 'd000' and 'i110') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	b111	d111
a	a	b	e112	h112
b	a	a	b211	d211
b	a	b	e212	h212
c	a	a	b311	d311
c	a	b	e312	h312
d	a	a	b411	d411
d	a	b	e412	h412
select a1,a2,b,       max(c) from t2 where (c > 'b1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where (c > 'b1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	b111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	b211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	NULL	c777	c999
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t2 where (c > 'f123') group by a1,a2,b;
a1	a2	b	max(c)
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where (c > 'f123') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	b	g112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	b	f212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	b	f312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	b	f412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t2 where (c < 'a0') group by a1,a2,b;
a1	a2	b	max(c)
select a1,a2,b,min(c),max(c) from t2 where (c < 'a0') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
select a1,a2,b,       max(c) from t2 where (c < 'k321') group by a1,a2,b;
a1	a2	b	max(c)
a	a	NULL	a999
a	a	a	d111
a	a	b	h112
a	b	a	k121
b	a	a	d211
b	a	b	h212
b	b	a	k221
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	j321
d	a	a	d411
d	a	b	h412
d	b	a	j421
select a1,a2,b,min(c),max(c) from t2 where (c < 'k321') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	k121
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	k221
c	a	NULL	c777	c999
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	j321
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	j421
select a1,a2,b,       max(c) from t2 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where (c < 'a0') or (c > 'b1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	b111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	b211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	NULL	c777	c999
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,       max(c) from t2 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
a1	a2	b	max(c)
a	a	NULL	a999
a	a	a	d111
a	a	b	h112
a	b	a	l121
a	b	b	p122
b	a	a	d211
b	a	b	h212
b	b	a	l221
b	b	b	p222
c	a	NULL	c999
c	a	a	d311
c	a	b	h312
c	b	a	l321
c	b	b	p322
d	a	a	d411
d	a	b	h412
d	b	a	l421
d	b	b	p422
select a1,a2,b,min(c),max(c) from t2 where (c > 'b1') or (c <= 'g1') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
a	a	a	a111	d111
a	a	b	e112	h112
a	b	a	i121	l121
a	b	b	m122	p122
b	a	a	a211	d211
b	a	b	e212	h212
b	b	a	i221	l221
b	b	b	m222	p222
c	a	NULL	c777	c999
c	a	a	a311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	a411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,min(c),max(c) from t2 where (c > 'b111') and (c <= 'g112') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	g112
b	a	a	b211	d211
b	a	b	e212	f212
c	a	NULL	c777	c999
c	a	a	b311	d311
c	a	b	e312	f312
d	a	a	b411	d411
d	a	b	e412	f412
select a1,a2,b,min(c),max(c) from t2 where (c < 'c5') or (c = 'g412') or (c = 'k421') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	NULL	a777	a999
a	a	a	a111	c111
b	a	a	a211	c211
c	a	a	a311	c311
d	a	a	a411	c411
d	a	b	g412	g412
d	b	a	k421	k421
select a1,a2,b,min(c),max(c) from t2 where ((c > 'b111') and (c <= 'g112')) or ((c > 'd000') and (c <= 'i110')) group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	h112
b	a	a	b211	d211
b	a	b	e212	h212
c	a	NULL	c777	c999
c	a	a	b311	d311
c	a	b	e312	h312
d	a	a	b411	d411
d	a	b	e412	h412
explain select a1,a2,b,min(c),max(c) from t1
where exists ( select * from t2 where t2.c = t1.c )
group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1	NULL	index	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	128	100.00	Using where; Using index
2	DEPENDENT SUBQUERY	t2	NULL	index	NULL	idx_t2_1	163	NULL	164	10.00	Using where; Using index
Warnings:
Note	1276	Field or reference 'test.t1.c' of SELECT #2 was resolved in SELECT #1
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where exists(/* select#2 */ select 1 from `test`.`t2` where (`test`.`t2`.`c` = `test`.`t1`.`c`)) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1
where exists ( select * from t2 where t2.c > 'b1' )
group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
2	SUBQUERY	t2	NULL	index	NULL	idx_t2_1	163	NULL	164	33.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where 1 group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a2` < 'b')) and (`test`.`t1`.`b` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a2` < 'b')) and (`test`.`t1`.`c` > 'b111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,min(c),max(c) from t1 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b') and (`test`.`t1`.`c` > 'b111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c) from t1 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c < 'h112') or (c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and ((`test`.`t1`.`a1` > 'a') or (`test`.`t1`.`a1` < '9')) and (`test`.`t1`.`a2` >= 'b') and (`test`.`t1`.`a2` < 'z') and ((`test`.`t1`.`c` < 'h112') or (`test`.`t1`.`c` = 'j121') or ((`test`.`t1`.`c` > 'k121') and (`test`.`t1`.`c` < 'm122')) or (`test`.`t1`.`c` > 'o122'))) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c) from t1 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122') or (c < 'h112') or (c = 'c111')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and ((`test`.`t1`.`a1` > 'a') or (`test`.`t1`.`a1` < '9')) and (`test`.`t1`.`a2` >= 'b') and (`test`.`t1`.`a2` < 'z') and ((`test`.`t1`.`c` = 'j121') or ((`test`.`t1`.`c` > 'k121') and (`test`.`t1`.`c` < 'm122')) or (`test`.`t1`.`c` > 'o122') or (`test`.`t1`.`c` < 'h112') or (`test`.`t1`.`c` = 'c111'))) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c) from t1 where (ord(a1) > 97) and (ord(a2) + ord(a1) > 194) and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (ord(`test`.`t1`.`a1`) > 97) and ((ord(`test`.`t1`.`a2`) + ord(`test`.`t1`.`a1`)) > 194)) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,min(c),max(c) from t2 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a2` < 'b')) and (`test`.`t2`.`b` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where (((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a2` < 'b')) and (`test`.`t2`.`c` > 'b111')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b,min(c),max(c) from t2 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b') and (`test`.`t2`.`c` > 'b111')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c < 'h112') or (c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and ((`test`.`t2`.`a1` > 'a') or (`test`.`t2`.`a1` < '9')) and (`test`.`t2`.`a2` >= 'b') and (`test`.`t2`.`a2` < 'z') and ((`test`.`t2`.`c` < 'h112') or (`test`.`t2`.`c` = 'j121') or ((`test`.`t2`.`c` > 'k121') and (`test`.`t2`.`c` < 'm122')) or (`test`.`t2`.`c` > 'o122'))) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122') or (c < 'h112') or (c = 'c111')) group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and ((`test`.`t2`.`a1` > 'a') or (`test`.`t2`.`a1` < '9')) and (`test`.`t2`.`a2` >= 'b') and (`test`.`t2`.`a2` < 'z') and ((`test`.`t2`.`c` = 'j121') or ((`test`.`t2`.`c` > 'k121') and (`test`.`t2`.`c` < 'm122')) or (`test`.`t2`.`c` > 'o122') or (`test`.`t2`.`c` < 'h112') or (`test`.`t2`.`c` = 'c111'))) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,min(c) from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where ((`test`.`t2`.`b` = 'c') and (`test`.`t2`.`a1` > 'a') and (`test`.`t2`.`a2` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	b	e112	h112
b	a	b	e212	h212
c	a	b	e312	h312
c	b	b	m322	p322
d	a	b	e412	h412
d	b	b	m422	p422
select a1,a2,b,min(c),max(c) from t1 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	h112
b	a	a	b211	d211
b	a	b	e212	h212
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,min(c),max(c) from t1 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	b	a	i121	l121
b	b	a	i221	l221
c	b	a	i321	l321
d	b	a	i421	l421
select a1,a2,b,min(c) from t1 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c < 'h112') or (c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122')) group by a1,a2,b;
a1	a2	b	min(c)
b	b	a	k221
c	b	a	k321
d	b	a	k421
select a1,a2,b,min(c) from t1 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122') or (c < 'h112') or (c = 'c111')) group by a1,a2,b;
a1	a2	b	min(c)
b	b	a	k221
c	b	a	k321
d	b	a	k421
select a1,a2,b,min(c) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b	min(c)
select a1,a2,b,min(c) from t1 where (ord(a1) > 97) and (ord(a2) + ord(a1) > 194) and (b = 'c') group by a1,a2,b;
a1	a2	b	min(c)
select a1,a2,b,min(c),max(c) from t2 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	b	e112	h112
b	a	b	e212	h212
c	a	b	e312	h312
c	b	b	m322	p322
d	a	b	e412	h412
d	b	b	m422	p422
e	a	b	NULL	NULL
select a1,a2,b,min(c),max(c) from t2 where (a1 >= 'c' or a2 < 'b') and (c > 'b111') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	a	a	c111	d111
a	a	b	e112	h112
b	a	a	b211	d211
b	a	b	e212	h212
c	a	NULL	c777	c999
c	a	a	b311	d311
c	a	b	e312	h312
c	b	a	i321	l321
c	b	b	m322	p322
d	a	a	b411	d411
d	a	b	e412	h412
d	b	a	i421	l421
d	b	b	m422	p422
select a1,a2,b,min(c),max(c) from t2 where (a2 >= 'b') and (b = 'a') and (c > 'b111') group by a1,a2,b;
a1	a2	b	min(c)	max(c)
a	b	a	i121	l121
b	b	a	i221	l221
c	b	a	i321	l321
d	b	a	i421	l421
select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c < 'h112') or (c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122')) group by a1,a2,b;
a1	a2	b	min(c)
b	b	a	k221
c	b	a	k321
d	b	a	k421
select a1,a2,b,min(c) from t2 where ((a1 > 'a') or (a1 < '9'))  and ((a2 >= 'b') and (a2 < 'z')) and (b = 'a') and ((c = 'j121') or (c > 'k121' and c < 'm122') or (c > 'o122') or (c < 'h112') or (c = 'c111')) group by a1,a2,b;
a1	a2	b	min(c)
b	b	a	k221
c	b	a	k321
d	b	a	k421
select a1,a2,b,min(c) from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b	min(c)
explain select a1,a2,b from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (((`test`.`t1`.`a1` >= 'c') or (`test`.`t1`.`a2` < 'b')) and (`test`.`t1`.`b` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`c` = 'i121') and (`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select a1,a2,b from t2 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where (((`test`.`t2`.`a1` >= 'c') or (`test`.`t2`.`a2` < 'b')) and (`test`.`t2`.`b` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	0.61	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = 'i121') and (`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'c') and (`test`.`t2`.`a1` > 'a') and (`test`.`t2`.`a2` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
select a1,a2,b from t1 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
a1	a2	b
a	a	b
b	a	b
c	a	b
c	b	b
d	a	b
d	b	b
select a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
a1	a2	b	c
a	b	a	i121
select a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b
select a1,a2,b from t2 where (a1 >= 'c' or a2 < 'b') and (b > 'a') group by a1,a2,b;
a1	a2	b
a	a	b
b	a	b
c	a	b
c	b	b
d	a	b
d	b	b
e	a	b
select a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
a1	a2	b	c
a	b	a	i121
select a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b
explain select distinct a1,a2,b from t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1`
explain select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain extended select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_1	idx_t1_1	163	NULL	128	0.78	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`c` = 'i121') and (`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a'))
explain select distinct b from t1 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	3.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain select distinct a1,a2,b from t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2`
explain select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b'))
explain extended select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_1	idx_t2_1	163	NULL	164	0.61	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = 'i121') and (`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b'))
explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'c') and (`test`.`t2`.`a1` > 'a') and (`test`.`t2`.`a2` > 'a'))
explain select distinct b from t2 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_1,idx_t2_2	idx_t2_2	146	NULL	164	3.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b'))
select distinct a1,a2,b from t1;
a1	a2	b
a	a	a
a	a	b
a	b	a
a	b	b
b	a	a
b	a	b
b	b	a
b	b	b
c	a	a
c	a	b
c	b	a
c	b	b
d	a	a
d	a	b
d	b	a
d	b	b
select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a');
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
a1	a2	b	c
a	b	a	i121
select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
a1	a2	b
select distinct b from t1 where (a2 >= 'b') and (b = 'a');
b
a
select distinct a1,a2,b from t2;
a1	a2	b
a	a	NULL
a	a	a
a	a	b
a	b	a
a	b	b
b	a	a
b	a	b
b	b	a
b	b	b
c	a	NULL
c	a	a
c	a	b
c	b	a
c	b	b
d	a	a
d	a	b
d	b	a
d	b	b
e	a	a
e	a	b
select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a');
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
a1	a2	b	c
a	b	a	i121
select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
a1	a2	b
select distinct b from t2 where (a2 >= 'b') and (b = 'a');
b
a
select distinct t_00.a1
from t1 t_00
where exists ( select * from t2 where a1 = t_00.a1 );
a1
a
b
c
d
select distinct a1,a1 from t1;
a1	a1
a	a
b	b
c	c
d	d
select distinct a2,a1,a2,a1 from t1;
a2	a1	a2	a1
a	a	a	a
b	a	b	a
a	b	a	b
b	b	b	b
a	c	a	c
b	c	b	c
a	d	a	d
b	d	b	d
select distinct t1.a1,t2.a1 from t1,t2;
a1	a1
a	a
b	a
c	a
d	a
a	b
b	b
c	b
d	b
a	c
b	c
c	c
d	c
a	d
b	d
c	d
d	d
a	e
b	e
c	e
d	e
explain select distinct a1,a2,b from t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1`
explain select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	163	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where ((`test`.`t1`.`c` = 'i121') and (`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select distinct b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by; Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`b` AS `b` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain select distinct a1,a2,b from t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2`
explain select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	#	0.61	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = 'i121') and (`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'c') and (`test`.`t2`.`a1` > 'a') and (`test`.`t2`.`a2` > 'a')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
explain select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	idx_t2_1,idx_t2_2	idx_t2_1	146	NULL	#	100.00	Using where; Using index for group-by; Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t2`.`b` AS `b` from `test`.`t2` where ((`test`.`t2`.`b` = 'a') and (`test`.`t2`.`a2` >= 'b')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`
select distinct a1,a2,b from t1;
a1	a2	b
a	a	a
a	a	b
a	b	a
a	b	b
b	a	a
b	a	b
b	b	a
b	b	b
c	a	a
c	a	b
c	b	a
c	b	b
d	a	a
d	a	b
d	b	a
d	b	b
select distinct a1,a2,b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select distinct a1,a2,b,c from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
a1	a2	b	c
a	b	a	i121
select distinct a1,a2,b from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b
select distinct b from t1 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
b
a
select distinct a1,a2,b from t2;
a1	a2	b
a	a	NULL
a	a	a
a	a	b
a	b	a
a	b	b
b	a	a
b	a	b
b	b	a
b	b	b
c	a	NULL
c	a	a
c	a	b
c	b	a
c	b	b
d	a	a
d	a	b
d	b	a
d	b	b
e	a	a
e	a	b
select distinct a1,a2,b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
a1	a2	b
a	b	a
b	b	a
c	b	a
d	b	a
select distinct a1,a2,b,c from t2 where (a2 >= 'b') and (b = 'a') and (c = 'i121') group by a1,a2,b;
a1	a2	b	c
a	b	a	i121
select distinct a1,a2,b from t2 where (a1 > 'a') and (a2 > 'a') and (b = 'c') group by a1,a2,b;
a1	a2	b
select distinct b from t2 where (a2 >= 'b') and (b = 'a') group by a1,a2,b;
b
a
explain select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	17	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`) AS `count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain select count(distinct a1,a2,b,c) from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1	idx_t1_1	163	NULL	65	100.00	Using where; Using index for group-by (scanning)
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`,`test`.`t1`.`c`) AS `count(distinct a1,a2,b,c)` from `test`.`t1` where ((`test`.`t1`.`c` = 'i121') and (`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain extended select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`) AS `count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`b` = 'c') and (`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a'))
explain select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	3.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`b`) AS `count(distinct b)` from `test`.`t1` where ((`test`.`t1`.`b` = 'a') and (`test`.`t1`.`a2` >= 'b'))
explain extended select 98 + count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a');
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	14	100.00	Using where; Using index for group-by
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select (98 + count(distinct `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`)) AS `98 + count(distinct a1,a2,b)` from `test`.`t1` where ((`test`.`t1`.`a1` > 'a') and (`test`.`t1`.`a2` > 'a'))
select count(distinct a1,a2,b) from t1 where (a2 >= 'b') and (b = 'a');
count(distinct a1,a2,b)
4
select count(distinct a1,a2,b,c) from t1 where (a2 >= 'b') and (b = 'a') and (c = 'i121');
count(distinct a1,a2,b,c)
1
select count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a') and (b = 'c');
count(distinct a1,a2,b)
0
select count(distinct b) from t1 where (a2 >= 'b') and (b = 'a');
count(distinct b)
1
select 98 + count(distinct a1,a2,b) from t1 where (a1 > 'a') and (a2 > 'a');
98 + count(distinct a1,a2,b)
104
explain select a1,a2,b, concat(min(c), max(c)) from t1 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,concat(min(`test`.`t1`.`c`),max(`test`.`t1`.`c`)) AS `concat(min(c), max(c))` from `test`.`t1` where (`test`.`t1`.`a1` < 'd') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select concat(a1,min(c)),b from t1 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select concat(`test`.`t1`.`a1`,min(`test`.`t1`.`c`)) AS `concat(a1,min(c))`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (`test`.`t1`.`a1` < 'd') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select concat(a1,min(c)),b,max(c) from t1 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select concat(`test`.`t1`.`a1`,min(`test`.`t1`.`c`)) AS `concat(a1,min(c))`,`test`.`t1`.`b` AS `b`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` < 'd') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select concat(a1,a2),b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select concat(`test`.`t1`.`a1`,`test`.`t1`.`a2`) AS `concat(a1,a2)`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (`test`.`t1`.`a1` < 'd') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select concat(ord(min(b)),ord(max(b))),min(b),max(b) from t1 group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_1,idx_t1_2	idx_t1_1	147	NULL	9	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select concat(ord(min(`test`.`t1`.`b`)),ord(max(`test`.`t1`.`b`))) AS `concat(ord(min(b)),ord(max(b)))`,min(`test`.`t1`.`b`) AS `min(b)`,max(`test`.`t1`.`b`) AS `max(b)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
select a1,a2,b, concat(min(c), max(c)) from t1 where a1 < 'd' group by a1,a2,b;
a1	a2	b	concat(min(c), max(c))
a	a	a	a111d111
a	a	b	e112h112
a	b	a	i121l121
a	b	b	m122p122
b	a	a	a211d211
b	a	b	e212h212
b	b	a	i221l221
b	b	b	m222p222
c	a	a	a311d311
c	a	b	e312h312
c	b	a	i321l321
c	b	b	m322p322
select concat(a1,min(c)),b from t1 where a1 < 'd' group by a1,a2,b;
concat(a1,min(c))	b
aa111	a
ae112	b
ai121	a
am122	b
ba211	a
be212	b
bi221	a
bm222	b
ca311	a
ce312	b
ci321	a
cm322	b
select concat(a1,min(c)),b,max(c) from t1 where a1 < 'd' group by a1,a2,b;
concat(a1,min(c))	b	max(c)
aa111	a	d111
ae112	b	h112
ai121	a	l121
am122	b	p122
ba211	a	d211
be212	b	h212
bi221	a	l221
bm222	b	p222
ca311	a	d311
ce312	b	h312
ci321	a	l321
cm322	b	p322
select concat(a1,a2),b,min(c),max(c) from t1 where a1 < 'd' group by a1,a2,b;
concat(a1,a2)	b	min(c)	max(c)
aa	a	a111	d111
aa	b	e112	h112
ab	a	i121	l121
ab	b	m122	p122
ba	a	a211	d211
ba	b	e212	h212
bb	a	i221	l221
bb	b	m222	p222
ca	a	a311	d311
ca	b	e312	h312
cb	a	i321	l321
cb	b	m322	p322
select concat(ord(min(b)),ord(max(b))),min(b),max(b) from t1 group by a1,a2;
concat(ord(min(b)),ord(max(b)))	min(b)	max(b)
9798	a	b
9798	a	b
9798	a	b
9798	a	b
9798	a	b
9798	a	b
9798	a	b
9798	a	b
explain select a1,a2,b,d,min(c),max(c) from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	idx_t1_1,idx_t1_2	NULL	NULL	NULL	128	100.00	Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`d` AS `d`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,b,d from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	idx_t1_1,idx_t1_2	NULL	NULL	NULL	128	100.00	Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`d` AS `d` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain extended select a1,a2,min(b),max(b) from t1
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	76	33.33	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,min(`test`.`t1`.`b`) AS `min(b)`,max(`test`.`t1`.`b`) AS `max(b)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`c` > 'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`
explain extended select a1,a2,b,min(c),max(c) from t1
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	idx_t1_0,idx_t1_1,idx_t1_2	NULL	NULL	NULL	128	11.02	Using where; Using temporary; Using filesort
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,min(`test`.`t1`.`c`) AS `min(c)`,max(`test`.`t1`.`c`) AS `max(c)` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`d` > 'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain extended select a1,a2,b,c from t1
where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (d > 'xy2') group by a1,a2,b,c;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	idx_t1_0,idx_t1_1,idx_t1_2	NULL	NULL	NULL	128	11.02	Using where; Using temporary; Using filesort
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`d` > 'xy2')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`,`test`.`t1`.`c`
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b < 'b') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	164	34.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where (((`test`.`t2`.`b` = 'b') and (`test`.`t2`.`a2` = 'a')) or (`test`.`t2`.`b` < 'b')) group by `test`.`t2`.`a1`
explain extended select a1,a2,b from t1 where (a1 = 'b' or a1 = 'd' or a1 = 'a' or a1 = 'c') and (a2 > 'a') and (c > 'a111') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	76	33.33	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b` from `test`.`t1` where (((`test`.`t1`.`a1` = 'b') or (`test`.`t1`.`a1` = 'd') or (`test`.`t1`.`a1` = 'a') or (`test`.`t1`.`a1` = 'c')) and (`test`.`t1`.`a2` > 'a') and (`test`.`t1`.`c` > 'a111')) group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	164	1.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,min(`test`.`t2`.`b`) AS `min(b)`,`test`.`t2`.`c` AS `c` from `test`.`t2` where ((`test`.`t2`.`c` = 'a111') and (`test`.`t2`.`a2` = 'a')) group by `test`.`t2`.`a1`
select a1,a2,min(b),c from t2 where (a2 = 'a') and (c = 'a111') group by a1;
a1	a2	min(b)	c
a	a	a	a111
explain select a1,a2,b,max(c),min(c) from t2 where (a2 = 'a') and (b = 'b') or (b = 'a') group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_0,idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	164	10.90	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,max(`test`.`t2`.`c`) AS `max(c)`,min(`test`.`t2`.`c`) AS `min(c)` from `test`.`t2` where (((`test`.`t2`.`b` = 'b') and (`test`.`t2`.`a2` = 'a')) or (`test`.`t2`.`b` = 'a')) group by `test`.`t2`.`a1`
explain select a1,a2,b,min(c),max(c) from t2
where (c > 'a000') and (c <= 'd999') and (c like '_8__') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	idx_t2_1,idx_t2_2	idx_t2_1	163	NULL	164	1.23	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a1` AS `a1`,`test`.`t2`.`a2` AS `a2`,`test`.`t2`.`b` AS `b`,min(`test`.`t2`.`c`) AS `min(c)`,max(`test`.`t2`.`c`) AS `max(c)` from `test`.`t2` where ((`test`.`t2`.`c` > 'a000') and (`test`.`t2`.`c` <= 'd999') and (`test`.`t2`.`c` like '_8__')) group by `test`.`t2`.`a1`,`test`.`t2`.`a2`,`test`.`t2`.`b`
explain select a1, a2, b, c, min(d), max(d) from t1 group by a1,a2,b,c;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	idx_t1_1	NULL	NULL	NULL	128	100.00	Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,min(`test`.`t1`.`d`) AS `min(d)`,max(`test`.`t1`.`d`) AS `max(d)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`,`test`.`t1`.`c`
explain select a1,a2,count(a2) from t1 group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,count(`test`.`t1`.`a2`) AS `count(a2)` from `test`.`t1` group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain extended select a1,a2,count(a2) from t1 where (a1 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	75.00	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1`,`test`.`t1`.`a2` AS `a2`,count(`test`.`t1`.`a2`) AS `count(a2)` from `test`.`t1` where (`test`.`t1`.`a1` > 'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain extended select sum(ord(a1)) from t1 where (a1 > 'a') group by a1,a2,b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	75.00	Using where; Using index
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select sum(ord(`test`.`t1`.`a1`)) AS `sum(ord(a1))` from `test`.`t1` where (`test`.`t1`.`a1` > 'a') group by `test`.`t1`.`a1`,`test`.`t1`.`a2`,`test`.`t1`.`b`
explain select distinct(a1) from t1 where ord(a2) = 98;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_2	147	NULL	128	100.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1` from `test`.`t1` where (ord(`test`.`t1`.`a2`) = 98)
select distinct(a1) from t1 where ord(a2) = 98;
a1
a
b
c
d
explain select a1 from t1 where a2 = 'b' group by a1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a1` AS `a1` from `test`.`t1` where (`test`.`t1`.`a2` = 'b') group by `test`.`t1`.`a1`
select a1 from t1 where a2 = 'b' group by a1;
a1
a
b
c
d
explain select distinct a1 from t1 where a2 = 'b';
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx_t1_0,idx_t1_1,idx_t1_2	idx_t1_1	130	NULL	5	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a1` AS `a1` from `test`.`t1` where (`test`.`t1`.`a2` = 'b')
select distinct a1 from t1 where a2 = 'b';
a1
a
b
c
d
drop table t1,t2,t3;
create table t1 (c1 int not null,c2 int not null, primary key(c1,c2));
insert into t1 (c1,c2) values
(10,1),(10,2),(10,3),(20,4),(20,5),(20,6),(30,7),(30,8),(30,9);
select distinct c1, c2 from t1 order by c2;
c1	c2
10	1
10	2
10	3
20	4
20	5
20	6
30	7
30	8
30	9
select c1,min(c2) as c2 from t1 group by c1 order by c2;
c1	c2
10	1
20	4
30	7
select c1,c2 from t1 group by c1,c2 order by c2;
c1	c2
10	1
10	2
10	3
20	4
20	5
20	6
30	7
30	8
30	9
drop table t1;
CREATE TABLE t1 (a varchar(5), b int(11), PRIMARY KEY (a,b));
INSERT INTO t1 VALUES ('AA',1), ('AA',2), ('AA',3), ('BB',1), ('AA',4);
OPTIMIZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	optimize	status	OK
SELECT a FROM t1 WHERE a='AA' GROUP BY a;
a
AA
SELECT a FROM t1 WHERE a='BB' GROUP BY a;
a
BB
EXPLAIN SELECT a FROM t1 WHERE a='AA' GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	PRIMARY	PRIMARY	7	NULL	1	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = 'AA') group by `test`.`t1`.`a`
EXPLAIN SELECT a FROM t1 WHERE a='BB' GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ref	PRIMARY	PRIMARY	7	const	1	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`a` = 'BB') group by `test`.`t1`.`a`
SELECT DISTINCT a FROM t1 WHERE a='BB';
a
BB
SELECT DISTINCT a FROM t1 WHERE a LIKE 'B%';
a
BB
SELECT a FROM t1 WHERE a LIKE 'B%' GROUP BY a;
a
BB
DROP TABLE t1;
CREATE TABLE t1 (
a int(11) NOT NULL DEFAULT '0',
b varchar(16) COLLATE latin1_general_ci NOT NULL DEFAULT '',
PRIMARY KEY  (a,b)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
CREATE PROCEDURE a(x INT)
BEGIN
DECLARE rnd INT;
DECLARE cnt INT;
WHILE x > 0 DO
SET rnd= x % 100;
SET cnt = (SELECT COUNT(*) FROM t1 WHERE a = rnd);
INSERT INTO t1(a,b) VALUES (rnd, CAST(cnt AS CHAR));
SET x= x - 1;
END WHILE;
END|
CALL a(1000);
SELECT a FROM t1 WHERE a=0;
a
0
0
0
0
0
0
0
0
0
0
SELECT DISTINCT a FROM t1 WHERE a=0;
a
0
SELECT COUNT(DISTINCT a) FROM t1 WHERE a=0;
COUNT(DISTINCT a)
1
DROP TABLE t1;
DROP PROCEDURE a;
CREATE TABLE t1 (a varchar(64) NOT NULL default '', PRIMARY KEY(a));
INSERT INTO t1 (a) VALUES 
(''), ('CENTRAL'), ('EASTERN'), ('GREATER LONDON'),
('NORTH CENTRAL'), ('NORTH EAST'), ('NORTH WEST'), ('SCOTLAND'),
('SOUTH EAST'), ('SOUTH WEST'), ('WESTERN');
EXPLAIN SELECT DISTINCT a,a FROM t1 ORDER BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	PRIMARY	PRIMARY	66	NULL	11	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a` AS `a`,`test`.`t1`.`a` AS `a` from `test`.`t1` order by `test`.`t1`.`a`
SELECT DISTINCT a,a FROM t1 ORDER BY a;
a	a
	
CENTRAL	CENTRAL
EASTERN	EASTERN
GREATER LONDON	GREATER LONDON
NORTH CENTRAL	NORTH CENTRAL
NORTH EAST	NORTH EAST
NORTH WEST	NORTH WEST
SCOTLAND	SCOTLAND
SOUTH EAST	SOUTH EAST
SOUTH WEST	SOUTH WEST
WESTERN	WESTERN
DROP TABLE t1;
CREATE TABLE t1 (id1 INT, id2 INT);
CREATE TABLE t2 (id2 INT, id3 INT, id5 INT);
CREATE TABLE t3 (id3 INT, id4 INT);
CREATE TABLE t4 (id4 INT);
CREATE TABLE t5 (id5 INT, id6 INT);
CREATE TABLE t6 (id6 INT);
INSERT INTO t1 VALUES(1,1);
INSERT INTO t2 VALUES(1,1,1);
INSERT INTO t3 VALUES(1,1);
INSERT INTO t4 VALUES(1);
INSERT INTO t5 VALUES(1,1);
INSERT INTO t6 VALUES(1);
SELECT * FROM
t1
NATURAL JOIN
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
id2	id1	id3	id5	id4	id3	id6	id5
1	1	1	1	1	1	1	1
SELECT * FROM
t1
NATURAL JOIN
(((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6) on t3.id4 = t5.id5) JOIN t2
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5));
id2	id1	id4	id3	id6	id5	id3	id5
1	1	1	1	1	1	1	1
SELECT * FROM t1 NATURAL JOIN ((t3 join (t5 NATURAL JOIN t6)) JOIN t2);
id2	id1	id3	id4	id6	id5	id3	id5
1	1	1	1	1	1	1	1
SELECT * FROM
(t2 JOIN (t3 NATURAL JOIN t4, t5 NATURAL JOIN t6)
ON (t3.id3 = t2.id3 AND t5.id5 = t2.id5))
NATURAL JOIN
t1;
id2	id3	id5	id4	id3	id6	id5	id1
1	1	1	1	1	1	1	1
SELECT * FROM
(t2 JOIN ((t3 NATURAL JOIN t4) join (t5 NATURAL JOIN t6)))
NATURAL JOIN
t1;
id2	id3	id5	id4	id3	id6	id5	id1
1	1	1	1	1	1	1	1
DROP TABLE t1,t2,t3,t4,t5,t6;
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a,b), KEY b (b));
INSERT INTO t1 VALUES (1,1),(1,2),(1,0),(1,3);
INSERT INTO t1 VALUES (2,1),(2,2),(2,0),(2,3);
INSERT INTO t1 VALUES (3,1),(3,2),(3,0),(3,3);
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
explain SELECT MAX(b), a FROM t1 WHERE b < 2 AND a = 1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	PRIMARY,b	PRIMARY	8	NULL	1	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select max(`test`.`t1`.`b`) AS `MAX(b)`,`test`.`t1`.`a` AS `a` from `test`.`t1` where ((`test`.`t1`.`a` = 1) and (`test`.`t1`.`b` < 2)) group by `test`.`t1`.`a`
SELECT MAX(b), a FROM t1 WHERE b < 2 AND a = 1 GROUP BY a;
MAX(b)	a
1	1
SELECT MIN(b), a FROM t1 WHERE b > 1 AND a = 1 GROUP BY a;
MIN(b)	a
2	1
CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a,b,c));
INSERT INTO t2 SELECT a,b,b FROM t1;
ANALYZE TABLE t2;
Table	Op	Msg_type	Msg_text
test.t2	analyze	status	OK
explain SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	PRIMARY	PRIMARY	12	NULL	1	100.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select min(`test`.`t2`.`c`) AS `MIN(c)` from `test`.`t2` where ((`test`.`t2`.`a` = 1) and (`test`.`t2`.`b` = 2) and (`test`.`t2`.`c` > 1)) group by `test`.`t2`.`a`
SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
MIN(c)
2
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT, b INT, INDEX (a,b));
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6),
(5,1), (5,2), (5,3), (5,4), (5,5);
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select max(`test`.`t1`.`b`) AS `max(b)`,`test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a`
FLUSH STATUS;
SELECT max(b), a FROM t1 GROUP BY a;
max(b)	a
5	1
3	2
1	3
6	4
5	5
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select max(`test`.`t1`.`b`) AS `max(b)`,`test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a`
FLUSH STATUS;
CREATE TABLE t2 SELECT max(b), a FROM t1 GROUP BY a;
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
FLUSH STATUS;
SELECT * FROM (SELECT max(b), a FROM t1 GROUP BY a) b;
max(b)	a
5	1
3	2
1	3
6	4
5	5
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
FLUSH STATUS;
(SELECT max(b), a FROM t1 GROUP BY a) UNION 
(SELECT max(b), a FROM t1 GROUP BY a);
max(b)	a
5	1
3	2
1	3
6	4
5	5
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	20
Handler_read_next	0
EXPLAIN (SELECT max(b), a FROM t1 GROUP BY a) UNION 
(SELECT max(b), a FROM t1 GROUP BY a);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
2	UNION	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
NULL	UNION RESULT	<union1,2>	NULL	ALL	NULL	NULL	NULL	NULL	NULL	NULL	Using temporary
Warnings:
Note	1003	(/* select#1 */ select max(`test`.`t1`.`b`) AS `max(b)`,`test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a`) union (/* select#2 */ select max(`test`.`t1`.`b`) AS `max(b)`,`test`.`t1`.`a` AS `a` from `test`.`t1` group by `test`.`t1`.`a`)
EXPLAIN SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
FROM t1 AS t1_outer;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer	NULL	index	NULL	a	10	NULL	20	100.00	Using index
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select (/* select#2 */ select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a` having (`test`.`t1`.`a` < 2)) AS `x` from `test`.`t1` `t1_outer`
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE EXISTS 
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer	NULL	index	NULL	a	10	NULL	20	100.00	Using index
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer` where 1
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE 
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer` where 0
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE 
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer	NULL	index	NULL	a	10	NULL	20	100.00	Using where; Using index
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer` where <in_optimizer>(`test`.`t1_outer`.`a`,`test`.`t1_outer`.`a` in ( <materialize> (/* select#2 */ select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a` having (`test`.`t1`.`a` < 2) ), <primary_index_lookup>(`test`.`t1_outer`.`a` in <temporary table> on <auto_key> where ((`test`.`t1_outer`.`a` = `materialized-subquery`.`max(b)`)))))
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING 
a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer` group by `test`.`t1_outer`.`a` having (`test`.`t1_outer`.`a` > (/* select#2 */ select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a` having (`test`.`t1`.`a` < 2)))
EXPLAIN SELECT 1 FROM t1 AS t1_outer1 JOIN t1 AS t1_outer2 
ON t1_outer1.a = (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) 
AND t1_outer1.b = t1_outer2.b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer1	NULL	ref	a	a	5	const	5	100.00	Using where; Using index
1	PRIMARY	t1_outer2	NULL	index	NULL	a	10	NULL	20	10.00	Using where; Using index; Using join buffer (Block Nested Loop)
2	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` `t1_outer1` join `test`.`t1` `t1_outer2` where ((`test`.`t1_outer2`.`b` = `test`.`t1_outer1`.`b`) and (`test`.`t1_outer1`.`a` = (/* select#2 */ select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a` having (`test`.`t1`.`a` < 2))))
EXPLAIN SELECT (SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
FROM t1 AS t1_outer) x2 FROM t1 AS t1_outer2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	PRIMARY	t1_outer2	NULL	index	NULL	a	10	NULL	20	100.00	Using index
2	SUBQUERY	t1_outer	NULL	index	NULL	a	10	NULL	20	100.00	Using index
3	SUBQUERY	t1	NULL	range	a	a	5	NULL	11	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select (/* select#2 */ select (/* select#3 */ select max(`test`.`t1`.`b`) from `test`.`t1` group by `test`.`t1`.`a` having (`test`.`t1`.`a` < 2)) AS `x` from `test`.`t1` `t1_outer`) AS `x2` from `test`.`t1` `t1_outer2`
CREATE TABLE t3 LIKE t1;
FLUSH STATUS;
INSERT INTO t3 SELECT a,MAX(b) FROM t1 GROUP BY a;
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
DELETE FROM t3;
FLUSH STATUS;
INSERT INTO t3 SELECT 1, (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) 
FROM t1 LIMIT 1;
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
FLUSH STATUS;
DELETE FROM t3 WHERE (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) > 10000;
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	0
FLUSH STATUS;
DELETE FROM t3 WHERE (SELECT (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) x 
FROM t1) > 10000;
ERROR 21000: Subquery returns more than 1 row
SHOW STATUS LIKE 'handler_read__e%';
Variable_name	Value
Handler_read_key	10
Handler_read_next	1
DROP TABLE t1,t2,t3;
CREATE TABLE t1 (a int, INDEX idx(a));
INSERT INTO t1 VALUES
(4), (2), (1), (2), (4), (2), (1), (4),
(4), (2), (1), (2), (2), (4), (1), (4),
(4), (2), (1), (2), (2), (4), (1), (4);
EXPLAIN SELECT DISTINCT(a) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx	idx	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a` AS `a` from `test`.`t1`
SELECT DISTINCT(a) FROM t1;
a
1
2
4
EXPLAIN SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	idx	idx	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct sql_big_result `test`.`t1`.`a` AS `a` from `test`.`t1`
SELECT SQL_BIG_RESULT DISTINCT(a) FROM t1;
a
1
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;
INSERT INTO t1 SELECT a + 4, b FROM t1;
EXPLAIN
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	NULL	NULL	NULL	NULL	24	100.00	Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,min(`test`.`t1`.`b`) AS `MIN(b)`,max(`test`.`t1`.`b`) AS `MAX(b)` from `test`.`t1` group by `test`.`t1`.`a` desc order by `test`.`t1`.`a` desc
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
a	MIN(b)	MAX(b)
8	1	3
7	1	3
6	1	3
5	1	3
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	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	break_it	break_it	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,min(`test`.`t1`.`b`) AS `MIN(b)`,max(`test`.`t1`.`b`) AS `MAX(b)` from `test`.`t1` group by `test`.`t1`.`a` order by `test`.`t1`.`a`
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
5	1	3
6	1	3
7	1	3
8	1	3
EXPLAIN
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	break_it	break_it	10	NULL	10	100.00	Using index for group-by; Using temporary; Using filesort
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,min(`test`.`t1`.`b`) AS `MIN(b)`,max(`test`.`t1`.`b`) AS `MAX(b)` from `test`.`t1` group by `test`.`t1`.`a` desc order by `test`.`t1`.`a` desc
SELECT a, MIN(b), MAX(b) FROM t1 GROUP BY a ORDER BY a DESC;
a	MIN(b)	MAX(b)
8	1	3
7	1	3
6	1	3
5	1	3
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	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	break_it	break_it	10	NULL	24	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`a` AS `a`,min(`test`.`t1`.`b`) AS `MIN(b)`,max(`test`.`t1`.`b`) AS `MAX(b)`,avg(`test`.`t1`.`b`) AS `AVG(b)` from `test`.`t1` group by `test`.`t1`.`a` desc order by `test`.`t1`.`a` desc
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
a	MIN(b)	MAX(b)	AVG(b)
8	1	3	2.0000
7	1	3	2.0000
6	1	3	2.0000
5	1	3	2.0000
4	1	3	2.0000
3	1	3	2.0000
2	1	3	2.0000
1	1	3	2.0000
DROP TABLE t1;
create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM;
insert into  t1 (a,b) values 
(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),
(0,7),(0,8),(0,9),(0,10),(0,11),(0,12),(0,13),
(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),
(1,7),(1,8),(1,9),(1,10),(1,11),(1,12),(1,13),
(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),
(2,7),(2,8),(2,9),(2,10),(2,11),(2,12),(2,13),
(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),
(3,7),(3,8),(3,9),(3,10),(3,11),(3,12),(3,13);
insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a;
select * from t1;
a	b
0	0
0	1
0	2
0	3
0	4
0	5
0	6
0	7
0	8
0	9
0	10
0	11
0	12
0	13
0	14
1	0
1	1
1	2
1	3
1	4
1	5
1	6
1	7
1	8
1	9
1	10
1	11
1	12
1	13
2	0
2	1
2	2
2	3
2	4
2	5
2	6
2	7
2	8
2	9
2	10
2	11
2	12
2	13
3	0
3	1
3	2
3	3
3	4
3	5
3	6
3	7
3	8
3	9
3	10
3	11
3	12
3	13
explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	PRIMARY,index	index	4	NULL	3	100.00	Using where; Using index for group-by; Using temporary
Warnings:
Warning	1681	'EXTENDED' is deprecated and will be removed in a future release.
Note	1003	/* select#1 */ select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a`
drop table t1;
CREATE TABLE t1 (a int, b int, c int, d int,
KEY foo (c,d,a,b), KEY bar (c,a,b,d));
INSERT INTO t1 VALUES (1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3), (1, 1, 1, 4);
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT a,b,c+1,d FROM t1;
EXPLAIN SELECT DISTINCT c FROM t1 WHERE d=4;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	foo,bar	foo	10	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`c` AS `c` from `test`.`t1` where (`test`.`t1`.`d` = 4)
SELECT DISTINCT c FROM t1 WHERE d=4;
c
1
2
DROP TABLE t1;
#
# Bug #45386: Wrong query result with MIN function in field list, 
#  WHERE and GROUP BY clause
#
CREATE TABLE t (a INT, b INT, INDEX (a,b));
INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
INSERT INTO t SELECT * FROM t;
INSERT INTO t SELECT * FROM t;
INSERT INTO t SELECT * FROM t;
# test MIN
#should use range with index for group by
EXPLAIN
SELECT a, MIN(b) FROM t WHERE b <> 0 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	range	a	a	10	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,min(`test`.`t`.`b`) AS `MIN(b)` from `test`.`t` where (`test`.`t`.`b` <> 0) group by `test`.`t`.`a`
#should return 1 row
SELECT a, MIN(b) FROM t WHERE b <> 0 GROUP BY a;
a	MIN(b)
2	1
# test MAX
#should use range with index for group by
EXPLAIN
SELECT a, MAX(b) FROM t WHERE b <> 1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	range	a	a	10	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t` where (`test`.`t`.`b` <> 1) group by `test`.`t`.`a`
#should return 1 row
SELECT a, MAX(b) FROM t WHERE b <> 1 GROUP BY a;
a	MAX(b)
2	0
# test 3 ranges and use the middle one
INSERT INTO t SELECT a, 2 FROM t;
#should use range with index for group by
EXPLAIN
SELECT a, MAX(b) FROM t WHERE b > 0 AND b < 2 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	range	a	a	10	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t` where ((`test`.`t`.`b` > 0) and (`test`.`t`.`b` < 2)) group by `test`.`t`.`a`
#should return 1 row
SELECT a, MAX(b) FROM t WHERE b > 0 AND b < 2 GROUP BY a;
a	MAX(b)
2	1
DROP TABLE t;
#
# Bug #48472: Loose index scan inappropriately chosen for some WHERE
#             conditions
# 
CREATE TABLE t (a INT, b INT, INDEX (a,b));
INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
INSERT INTO t SELECT * FROM t;
SELECT a, MAX(b) FROM t WHERE 0=b+0 GROUP BY a;
a	MAX(b)
2	0
DROP TABLE t;
End of 5.0 tests
#
# Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in
#              server crash
#
CREATE TABLE t (a INT, b INT, INDEX (a,b));
INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
INSERT INTO t SELECT * FROM t;
SELECT a, MAX(b) FROM t WHERE b GROUP BY a;
a	MAX(b)
2	1
DROP TABLE t;
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL, KEY (b));
INSERT INTO t1 VALUES(1,1),(2,1);
ANALYZE TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	analyze	status	OK
SELECT 1 AS c, b FROM t1 WHERE b IN (1,2) GROUP BY c, b;
c	b
1	1
SELECT a FROM t1 WHERE b=1;
a
1
2
DROP TABLE t1;
# 
# Bug#47762: Incorrect result from MIN() when WHERE tests NOT NULL column
#            for NULL
#
## Test for NULLs allowed
CREATE TABLE t1 ( a INT, KEY (a) );
INSERT INTO t1 VALUES (1), (2), (3);
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a > NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a > NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a < NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a < NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a <=> NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	No matching min/max row
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a <=> NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
x	x	x	NULL	x	x	x	x	x	x	100.00	Using where; Using index
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	No matching min/max row
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
MIN( a )
NULL
INSERT INTO t1 VALUES (NULL), (NULL);
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a > NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a > NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a < NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a < NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a <=> NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	Select tables optimized away
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a <=> NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
x	x	x	NULL	x	x	x	x	x	x	100.00	Using where; Using index
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	Select tables optimized away
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
MIN( a )
NULL
DROP TABLE t1;
## Test for NOT NULLs
CREATE TABLE t1 ( a INT NOT NULL PRIMARY KEY);
INSERT INTO t1 VALUES (1), (2), (3);
#
# NULL-safe operator test disabled for non-NULL indexed columns.
#
# See bugs
#
# - Bug#52173: Reading NULL value from non-NULL index gives
#   wrong result in embedded server 
#
# - Bug#52174: Sometimes wrong plan when reading a MAX value from 
#   non-NULL index
#
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a <> NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a > NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a > NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a < NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a < NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND 10;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN NULL AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a BETWEEN 10 AND NULL;
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	no matching row in const table
x	x	x	NULL	x	x	x	x	x	x	100.00	Using where; Using index
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a = (SELECT a FROM t1 WHERE a < 0);
MIN( a )
NULL
EXPLAIN
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
x	x	x	NULL	x	x	x	x	x	x	NULL	Impossible WHERE
Warnings:
x	x	x
SELECT MIN( a ) FROM t1 WHERE a IS NULL;
MIN( a )
NULL
DROP TABLE t1;
#
# Bug#53859: Valgrind: opt_sum_query(TABLE_LIST*, List<Item>&, Item*) at
# opt_sum.cc:305
#
CREATE TABLE t1 ( a INT, KEY (a) );
INSERT INTO t1 VALUES (1), (2), (3);
SELECT MIN( a ) AS min_a
FROM t1
WHERE a > 1 AND a IS NULL
ORDER BY min_a;
min_a
NULL
DROP TABLE t1;
End of 5.1 tests
#
# WL#3220 (Loose index scan for COUNT DISTINCT)
#
CREATE TABLE t1 (a INT, b INT, c INT, KEY (a,b));
INSERT INTO t1 VALUES (1,1,1), (1,2,1), (1,3,1), (1,4,1);
INSERT INTO t1 SELECT a, b + 4, 1 FROM t1;
INSERT INTO t1 SELECT a + 1, b, 1 FROM t1;
INSERT INTO t1 SELECT a + 2, b + 8, 1 FROM t1;
CREATE TABLE t2 (a INT, b INT, c INT, d INT, e INT, f INT, KEY (a,b,c));
INSERT INTO t2 VALUES (1,1,1,1,1,1), (1,2,1,1,1,1), (1,3,1,1,1,1), 
(1,4,1,1,1,1);
INSERT INTO t2 SELECT a, b + 4, c,d,e,f FROM t2;
INSERT INTO t2 SELECT a + 1, b, c,d,e,f FROM t2;
INSERT INTO t2 SELECT a + 2, b + 8, c,d,e,f FROM t2;
EXPLAIN SELECT COUNT(DISTINCT a) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1`
SELECT COUNT(DISTINCT a) FROM t1;
COUNT(DISTINCT a)
4
EXPLAIN SELECT COUNT(DISTINCT a,b) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`,`test`.`t1`.`b`) AS `COUNT(DISTINCT a,b)` from `test`.`t1`
SELECT COUNT(DISTINCT a,b) FROM t1;
COUNT(DISTINCT a,b)
32
EXPLAIN SELECT COUNT(DISTINCT b,a) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`b`,`test`.`t1`.`a`) AS `COUNT(DISTINCT b,a)` from `test`.`t1`
SELECT COUNT(DISTINCT b,a) FROM t1;
COUNT(DISTINCT b,a)
32
EXPLAIN SELECT COUNT(DISTINCT b) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	a	a	10	NULL	32	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1`
SELECT COUNT(DISTINCT b) FROM t1;
COUNT(DISTINCT b)
16
EXPLAIN SELECT COUNT(DISTINCT a) FROM t1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1` group by `test`.`t1`.`a`
SELECT COUNT(DISTINCT a) FROM t1 GROUP BY a;
COUNT(DISTINCT a)
1
1
1
1
EXPLAIN SELECT COUNT(DISTINCT b) FROM t1 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`b`) AS `COUNT(DISTINCT b)` from `test`.`t1` group by `test`.`t1`.`a`
SELECT COUNT(DISTINCT b) FROM t1 GROUP BY a;
COUNT(DISTINCT b)
8
8
8
8
EXPLAIN SELECT COUNT(DISTINCT a) FROM t1 GROUP BY b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	a	a	10	NULL	32	100.00	Using index; Using filesort
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1` group by `test`.`t1`.`b`
SELECT COUNT(DISTINCT a) FROM t1 GROUP BY b;
COUNT(DISTINCT a)
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
EXPLAIN SELECT DISTINCT COUNT(DISTINCT a) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1`
SELECT DISTINCT COUNT(DISTINCT a) FROM t1;
COUNT(DISTINCT a)
4
EXPLAIN SELECT COUNT(DISTINCT a, b + 0) FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	NULL	a	10	NULL	32	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`,(`test`.`t1`.`b` + 0)) AS `COUNT(DISTINCT a, b + 0)` from `test`.`t1`
SELECT COUNT(DISTINCT a, b + 0) FROM t1;
COUNT(DISTINCT a, b + 0)
32
EXPLAIN SELECT COUNT(DISTINCT a) FROM t1 HAVING COUNT(DISTINCT b) < 20;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	index	NULL	a	10	NULL	32	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1` having (count(distinct `test`.`t1`.`b`) < 20)
SELECT COUNT(DISTINCT a) FROM t1 HAVING COUNT(DISTINCT b) < 20;
COUNT(DISTINCT a)
4
EXPLAIN SELECT COUNT(DISTINCT a) FROM t1 HAVING COUNT(DISTINCT c) < 10;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	ALL	NULL	NULL	NULL	NULL	32	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)` from `test`.`t1` having (count(distinct `test`.`t1`.`c`) < 10)
SELECT COUNT(DISTINCT a) FROM t1 HAVING COUNT(DISTINCT c) < 10;
COUNT(DISTINCT a)
4
EXPLAIN SELECT 1 FROM t1 HAVING COUNT(DISTINCT a) < 10;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` having (count(distinct `test`.`t1`.`a`) < 10)
SELECT 1 FROM t1 HAVING COUNT(DISTINCT a) < 10;
1
1
EXPLAIN SELECT 1 FROM t1 GROUP BY a HAVING COUNT(DISTINCT b) > 1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select 1 AS `1` from `test`.`t1` group by `test`.`t1`.`a` having (count(distinct `test`.`t1`.`b`) > 1)
SELECT 1 FROM t1 GROUP BY a HAVING COUNT(DISTINCT b) > 1;
1
1
1
1
1
EXPLAIN SELECT COUNT(DISTINCT t1_1.a) FROM t1 t1_1, t1 t1_2 GROUP BY t1_1.a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1_1	NULL	index	a	a	10	NULL	32	100.00	Using index; Using temporary; Using filesort
1	SIMPLE	t1_2	NULL	index	NULL	a	10	NULL	32	100.00	Using index; Using join buffer (Block Nested Loop)
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1_1`.`a`) AS `COUNT(DISTINCT t1_1.a)` from `test`.`t1` `t1_1` join `test`.`t1` `t1_2` group by `test`.`t1_1`.`a`
SELECT COUNT(DISTINCT t1_1.a) FROM t1 t1_1, t1 t1_2 GROUP BY t1_1.a;
COUNT(DISTINCT t1_1.a)
1
1
1
1
EXPLAIN SELECT COUNT(DISTINCT a), 12 FROM t1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t1`.`a`) AS `COUNT(DISTINCT a)`,12 AS `12` from `test`.`t1`
SELECT COUNT(DISTINCT a), 12 FROM t1;
COUNT(DISTINCT a)	12
4	12
EXPLAIN SELECT COUNT(DISTINCT a, b, c) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	15	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`,`test`.`t2`.`c`) AS `COUNT(DISTINCT a, b, c)` from `test`.`t2`
SELECT COUNT(DISTINCT a, b, c) FROM t2;
COUNT(DISTINCT a, b, c)
32
EXPLAIN SELECT COUNT(DISTINCT a), SUM(DISTINCT a), AVG(DISTINCT a) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	5	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`) AS `COUNT(DISTINCT a)`,sum(distinct `test`.`t2`.`a`) AS `SUM(DISTINCT a)`,avg(distinct `test`.`t2`.`a`) AS `AVG(DISTINCT a)` from `test`.`t2`
SELECT COUNT(DISTINCT a), SUM(DISTINCT a), AVG(DISTINCT a) FROM t2;
COUNT(DISTINCT a)	SUM(DISTINCT a)	AVG(DISTINCT a)
4	10	2.5000
EXPLAIN SELECT COUNT(DISTINCT a), SUM(DISTINCT a), AVG(DISTINCT f) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	ALL	NULL	NULL	NULL	NULL	32	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`) AS `COUNT(DISTINCT a)`,sum(distinct `test`.`t2`.`a`) AS `SUM(DISTINCT a)`,avg(distinct `test`.`t2`.`f`) AS `AVG(DISTINCT f)` from `test`.`t2`
SELECT COUNT(DISTINCT a), SUM(DISTINCT a), AVG(DISTINCT f) FROM t2;
COUNT(DISTINCT a)	SUM(DISTINCT a)	AVG(DISTINCT f)
4	10	1.0000
EXPLAIN SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, a) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT a, b)`,count(distinct `test`.`t2`.`b`,`test`.`t2`.`a`) AS `COUNT(DISTINCT b, a)` from `test`.`t2`
SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, a) FROM t2;
COUNT(DISTINCT a, b)	COUNT(DISTINCT b, a)
32	32
EXPLAIN SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, f) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	ALL	NULL	NULL	NULL	NULL	32	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT a, b)`,count(distinct `test`.`t2`.`b`,`test`.`t2`.`f`) AS `COUNT(DISTINCT b, f)` from `test`.`t2`
SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, f) FROM t2;
COUNT(DISTINCT a, b)	COUNT(DISTINCT b, f)
32	16
EXPLAIN SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, d) FROM t2;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	ALL	NULL	NULL	NULL	NULL	32	100.00	NULL
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT a, b)`,count(distinct `test`.`t2`.`b`,`test`.`t2`.`d`) AS `COUNT(DISTINCT b, d)` from `test`.`t2`
SELECT COUNT(DISTINCT a, b), COUNT(DISTINCT b, d) FROM t2;
COUNT(DISTINCT a, b)	COUNT(DISTINCT b, d)
32	16
EXPLAIN SELECT a, c, COUNT(DISTINCT c, a, b) FROM t2 GROUP BY a, b, c;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	15	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`c` AS `c`,count(distinct `test`.`t2`.`c`,`test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT c, a, b)` from `test`.`t2` group by `test`.`t2`.`a`,`test`.`t2`.`b`,`test`.`t2`.`c`
SELECT a, c, COUNT(DISTINCT c, a, b) FROM t2 GROUP BY a, b, c;
a	c	COUNT(DISTINCT c, a, b)
1	1	1
1	1	1
1	1	1
1	1	1
1	1	1
1	1	1
1	1	1
1	1	1
2	1	1
2	1	1
2	1	1
2	1	1
2	1	1
2	1	1
2	1	1
2	1	1
3	1	1
3	1	1
3	1	1
3	1	1
3	1	1
3	1	1
3	1	1
3	1	1
4	1	1
4	1	1
4	1	1
4	1	1
4	1	1
4	1	1
4	1	1
4	1	1
EXPLAIN SELECT COUNT(DISTINCT c, a, b) FROM t2
WHERE a > 5 AND b BETWEEN 10 AND 20 GROUP BY a, b, c;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	5	NULL	1	11.11	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`c`,`test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT c, a, b)` from `test`.`t2` where ((`test`.`t2`.`a` > 5) and (`test`.`t2`.`b` between 10 and 20)) group by `test`.`t2`.`a`,`test`.`t2`.`b`,`test`.`t2`.`c`
SELECT COUNT(DISTINCT c, a, b) FROM t2
WHERE a > 5 AND b BETWEEN 10 AND 20 GROUP BY a, b, c;
COUNT(DISTINCT c, a, b)
EXPLAIN SELECT COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 WHERE a = 5
GROUP BY b;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	ref	a	a	5	const	1	100.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`b`) AS `COUNT(DISTINCT b)`,sum(distinct `test`.`t2`.`b`) AS `SUM(DISTINCT b)` from `test`.`t2` where (`test`.`t2`.`a` = 5) group by `test`.`t2`.`b`
SELECT COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 WHERE a = 5
GROUP BY b;
COUNT(DISTINCT b)	SUM(DISTINCT b)
EXPLAIN SELECT a, COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a` AS `a`,count(distinct `test`.`t2`.`b`) AS `COUNT(DISTINCT b)`,sum(distinct `test`.`t2`.`b`) AS `SUM(DISTINCT b)` from `test`.`t2` group by `test`.`t2`.`a`
SELECT a, COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a;
a	COUNT(DISTINCT b)	SUM(DISTINCT b)
1	8	36
2	8	36
3	8	100
4	8	100
EXPLAIN SELECT COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	10	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`b`) AS `COUNT(DISTINCT b)`,sum(distinct `test`.`t2`.`b`) AS `SUM(DISTINCT b)` from `test`.`t2` group by `test`.`t2`.`a`
SELECT COUNT(DISTINCT b), SUM(DISTINCT b) FROM t2 GROUP BY a;
COUNT(DISTINCT b)	SUM(DISTINCT b)
8	36
8	36
8	100
8	100
EXPLAIN SELECT COUNT(DISTINCT a, b) FROM t2 WHERE c = 13 AND d = 42;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	ALL	a	NULL	NULL	NULL	32	3.12	Using where
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT a, b)` from `test`.`t2` where ((`test`.`t2`.`d` = 42) and (`test`.`t2`.`c` = 13))
SELECT COUNT(DISTINCT a, b) FROM t2 WHERE c = 13 AND d = 42;
COUNT(DISTINCT a, b)
0
EXPLAIN SELECT a, COUNT(DISTINCT a), SUM(DISTINCT a) FROM t2
WHERE b = 13 AND c = 42 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	15	NULL	10	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`t2`.`a` AS `a`,count(distinct `test`.`t2`.`a`) AS `COUNT(DISTINCT a)`,sum(distinct `test`.`t2`.`a`) AS `SUM(DISTINCT a)` from `test`.`t2` where ((`test`.`t2`.`c` = 42) and (`test`.`t2`.`b` = 13)) group by `test`.`t2`.`a`
SELECT a, COUNT(DISTINCT a), SUM(DISTINCT a) FROM t2
WHERE b = 13 AND c = 42 GROUP BY a;
a	COUNT(DISTINCT a)	SUM(DISTINCT a)
# This query could have been resolved using loose index scan since
# the second part of count(..) is defined by a constant predicate
EXPLAIN SELECT COUNT(DISTINCT a, b), SUM(DISTINCT a) FROM t2 WHERE b = 42;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	NULL	a	15	NULL	32	10.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select count(distinct `test`.`t2`.`a`,`test`.`t2`.`b`) AS `COUNT(DISTINCT a, b)`,sum(distinct `test`.`t2`.`a`) AS `SUM(DISTINCT a)` from `test`.`t2` where (`test`.`t2`.`b` = 42)
SELECT COUNT(DISTINCT a, b), SUM(DISTINCT a) FROM t2 WHERE b = 42;
COUNT(DISTINCT a, b)	SUM(DISTINCT a)
0	NULL
EXPLAIN SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	a	a	15	NULL	32	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select sum(distinct `test`.`t2`.`a`) AS `SUM(DISTINCT a)`,max(`test`.`t2`.`b`) AS `MAX(b)` from `test`.`t2` group by `test`.`t2`.`a`
SELECT SUM(DISTINCT a), MAX(b) FROM t2 GROUP BY a;
SUM(DISTINCT a)	MAX(b)
1	8
2	8
3	16
4	16
EXPLAIN SELECT 42 * (a + c + COUNT(DISTINCT c, a, b)) FROM t2 GROUP BY a, b, c;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	range	a	a	15	NULL	10	100.00	Using index for group-by
Warnings:
Note	1003	/* select#1 */ select (42 * ((`test`.`t2`.`a` + `test`.`t2`.`c`) + count(distinct `test`.`t2`.`c`,`test`.`t2`.`a`,`test`.`t2`.`b`))) AS `42 * (a + c + COUNT(DISTINCT c, a, b))` from `test`.`t2` group by `test`.`t2`.`a`,`test`.`t2`.`b`,`test`.`t2`.`c`
SELECT 42 * (a + c + COUNT(DISTINCT c, a, b)) FROM t2 GROUP BY a, b, c;
42 * (a + c + COUNT(DISTINCT c, a, b))
126
126
126
126
126
126
126
126
168
168
168
168
168
168
168
168
210
210
210
210
210
210
210
210
252
252
252
252
252
252
252
252
EXPLAIN SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t2	NULL	index	a	a	15	NULL	32	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select (sum(distinct `test`.`t2`.`a`) + max(`test`.`t2`.`b`)) AS `(SUM(DISTINCT a) + MAX(b))` from `test`.`t2` group by `test`.`t2`.`a`
SELECT (SUM(DISTINCT a) + MAX(b)) FROM t2 GROUP BY a;
(SUM(DISTINCT a) + MAX(b))
9
10
19
20
DROP TABLE t1,t2;
# end of WL#3220 tests
#
# Bug#50539: Wrong result when loose index scan is used for an aggregate
#            function with distinct
#
CREATE TABLE t1 (
f1 int(11) NOT NULL DEFAULT '0',
f2 char(1) NOT NULL DEFAULT '',
PRIMARY KEY (f1,f2)
) ;
insert into t1 values(1,'A'),(1 , 'B'), (1, 'C'), (2, 'A'), 
(3, 'A'), (3, 'B'), (3, 'C'), (3, 'D');
SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1;
f1	COUNT(DISTINCT f2)
1	3
2	1
3	4
explain SELECT f1, COUNT(DISTINCT f2) FROM t1 GROUP BY f1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	PRIMARY	PRIMARY	5	NULL	9	100.00	Using index for group-by (scanning)
Warnings:
Note	1003	/* select#1 */ select `test`.`t1`.`f1` AS `f1`,count(distinct `test`.`t1`.`f2`) AS `COUNT(DISTINCT f2)` from `test`.`t1` group by `test`.`t1`.`f1`
drop table t1;
# End of test#50539.
#
# Bug#18497308 WRONG COST ESTIMATE FOR LOOSE INDEX SCAN WHEN
#              INDEX STATISTICS IS MISSING
#
CREATE TABLE t1 (
a INTEGER,
b INTEGER,
c INTEGER,
d INTEGER,
KEY foo (a,b,c,d)
) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1, 1, 1, 1), (1, 2, 1, 2), (1, 3, 1, 3), (1, 4, 1, 4);
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
EXPLAIN SELECT DISTINCT a FROM t1 WHERE b=4;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	foo	foo	10	NULL	101	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t1`.`a` AS `a` from `test`.`t1` where (`test`.`t1`.`b` = 4)
SELECT DISTINCT a FROM t1 WHERE b=4;
a
1
DROP TABLE t1;
#
# Bug#17217128 -  BAD INTERACTION BETWEEN MIN/MAX AND
#                 "HAVING SUM(DISTINCT)": WRONG RESULTS.
#
CREATE TABLE t (a INT, b INT, KEY(a,b));
INSERT INTO t VALUES (1,1), (2,2), (3,3), (4,4), (1,0), (3,2), (4,5);
set optimizer_trace_max_mem_size=1048576;
set @@session.optimizer_trace='enabled=on';
set end_markers_in_json=on;
ANALYZE TABLE t;
Table	Op	Msg_type	Msg_text
test.t	analyze	status	OK
SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
a	SUM(DISTINCT a)	MIN(b)
1	1	0
2	2	2
3	3	2
4	4	4
EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b) FROM t GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	a	a	10	NULL	7	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,sum(distinct `test`.`t`.`a`) AS `SUM(DISTINCT a)`,min(`test`.`t`.`b`) AS `MIN(b)` from `test`.`t` group by `test`.`t`.`a`
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
a	SUM(DISTINCT a)	MAX(b)
1	1	1
2	2	2
3	3	3
4	4	5
EXPLAIN SELECT a, SUM(DISTINCT a), MAX(b) FROM t GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	a	a	10	NULL	7	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,sum(distinct `test`.`t`.`a`) AS `SUM(DISTINCT a)`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t` group by `test`.`t`.`a`
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
a	MAX(b)
1	1
2	2
3	3
4	5
EXPLAIN SELECT a, MAX(b) FROM t GROUP BY a HAVING SUM(DISTINCT a);
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	a	a	10	NULL	7	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t` group by `test`.`t`.`a` having sum(distinct `test`.`t`.`a`)
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
SUM(DISTINCT a)	MIN(b)	MAX(b)
10	0	5
EXPLAIN SELECT SUM(DISTINCT a), MIN(b), MAX(b) FROM t;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	a	a	10	NULL	7	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select sum(distinct `test`.`t`.`a`) AS `SUM(DISTINCT a)`,min(`test`.`t`.`b`) AS `MIN(b)`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t`
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
a	SUM(DISTINCT a)	MIN(b)	MAX(b)
1	1	0	1
2	2	2	2
3	3	2	3
4	4	4	5
EXPLAIN SELECT a, SUM(DISTINCT a), MIN(b), MAX(b) FROM t GROUP BY a;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	a	a	10	NULL	7	100.00	Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`t`.`a` AS `a`,sum(distinct `test`.`t`.`a`) AS `SUM(DISTINCT a)`,min(`test`.`t`.`b`) AS `MIN(b)`,max(`test`.`t`.`b`) AS `MAX(b)` from `test`.`t` group by `test`.`t`.`a`
SELECT TRACE RLIKE 'have_both_agg_distinct_and_min_max' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SET optimizer_trace_max_mem_size=DEFAULT;
SET optimizer_trace=DEFAULT;
SET end_markers_in_json=DEFAULT;
DROP TABLE t;
#
# Bug #18066518: THE COST VALUE IS A NEGATIVE NUMBER FOR MERGE ENGINE
#                TABLE
#
CREATE TABLE t(a INT PRIMARY KEY)
ENGINE = MERGE;
EXPLAIN SELECT DISTINCT(a) FROM t;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t	NULL	index	PRIMARY	PRIMARY	4	NULL	0	0.00	Using index
Warnings:
Note	1003	/* select#1 */ select distinct `test`.`t`.`a` AS `a` from `test`.`t`
SELECT DISTINCT(a) FROM t;
a
DROP TABLE t;
# End of test#18066518.
#
# Bug #18486293: ASSERTION FAILED: KEYS >= 0.0 IN
#                COST_MODEL_TABLE::KEY_COMPARE_COST
#
CREATE TABLE t (b INT, KEY b_key (b)) ENGINE=INNODB
PARTITION BY RANGE COLUMNS(b) (PARTITION p_part VALUES LESS THAN (0));
SELECT 1 FROM t WHERE b IN ('') GROUP BY  b ;
1
DROP TABLE t;
# End of test#18486293.
#
# Bug#18109609: LOOSE INDEX SCAN IS NOT USED WHEN IT SHOULD
#
CREATE TABLE t1 (
id INT AUTO_INCREMENT PRIMARY KEY,
c1 INT,
c2 INT,
KEY(c1,c2));
INSERT INTO t1(c1,c2) VALUES
(1, 1), (1,2), (2,1), (2,2), (3,1), (3,2), (3,3), (4,1), (4,2), (4,3),
(4,4), (4,5), (4,6), (4,7), (4,8), (4,9), (4,10), (4,11), (4,12), (4,13),
(4,14), (4,15), (4,16), (4,17), (4,18), (4,19), (4,20),(5,5);
EXPLAIN SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	t1	NULL	range	c1	c1	5	NULL	7	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select max(`test`.`t1`.`c2`) AS `MAX(c2)`,`test`.`t1`.`c1` AS `c1` from `test`.`t1` where (`test`.`t1`.`c1` = 4) group by `test`.`t1`.`c1`
FLUSH STATUS;
SELECT MAX(c2), c1 FROM t1 WHERE c1 = 4 GROUP BY c1;
MAX(c2)	c1
20	4
SHOW SESSION STATUS LIKE 'Handler_read%';
Variable_name	Value
Handler_read_first	0
Handler_read_key	3
Handler_read_last	1
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	0
DROP TABLE t1;
# End of test for Bug#18109609
#
# Bug#24423143 - WRONG RESULTS FOR AGGREGATE QUERY
#
# Test index merge tree scenario
CREATE TABLE a (
aggr_col int,
group_by_col int,
KEY aggr_col_key (aggr_col),
KEY group_by_col_key (group_by_col, aggr_col)
) ENGINE=InnoDB;
set optimizer_trace_max_mem_size=1048576;
set @@session.optimizer_trace='enabled=on';
set end_markers_in_json=on;
INSERT INTO a VALUES (2,3),(5,6),(6,3),(7,NULL),(9,NULL),(10,6);
ANALYZE TABLE a;
Table	Op	Msg_type	Msg_text
test.a	analyze	status	OK
SELECT group_by_col, MIN(aggr_col) FROM a
WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)
NULL	7
3	6
6	5
EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a
WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	aggr_col_key,group_by_col_key	group_by_col_key	10	NULL	6	55.55	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` > 2)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT group_by_col, MAX(aggr_col) FROM a
WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col;
group_by_col	MAX(aggr_col)
NULL	7
3	6
6	5
EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a
WHERE (group_by_col IN (70 , 9)) OR (aggr_col < 9) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	aggr_col_key,group_by_col_key	group_by_col_key	10	NULL	6	55.55	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'disjuntive_predicate_present' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Test IMPOSSIBLE TREE scenario
ALTER TABLE a DROP KEY aggr_col_key;
SELECT group_by_col, MIN(aggr_col) FROM a
WHERE (group_by_col IN (70 ,9)) OR (aggr_col > 2) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)
NULL	7
3	6
6	5
EXPLAIN SELECT group_by_col, MIN(aggr_col) FROM a
WHERE (group_by_col IN (70, 9)) OR (aggr_col > 2) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	6	55.55	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` > 2)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SELECT group_by_col, MAX(aggr_col) FROM a
WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col;
group_by_col	MAX(aggr_col)
NULL	7
3	6
6	5
EXPLAIN SELECT group_by_col, MAX(aggr_col) FROM a
WHERE (group_by_col IN (70, 9)) OR (aggr_col < 9) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	6	55.55	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (70,9)) or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 3: aggregate field used as equal expression.
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
NULL	9	9
3	2	6
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE (group_by_col IN (3, 9)) OR (aggr_col = 9) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	6	44.44	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` in (3,9)) or (`test`.`a`.`aggr_col` = 9)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 4: non aggregate field used as equal expression.
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
NULL	9	9
3	2	6
6	10	10
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE (group_by_col = 3) OR (aggr_col > 8) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	6	55.55	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` = 3) or (`test`.`a`.`aggr_col` > 8)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 5: aggregate field used as non-zero expression.
INSERT INTO a VALUES(0, 3);
INSERT INTO a VALUES(0, 9);
INSERT INTO a VALUES(8, 0);
ANALYZE TABLE a;
Table	Op	Msg_type	Msg_text
test.a	analyze	status	OK
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE (group_by_col = 9) OR aggr_col GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
NULL	7	9
0	8	8
3	2	6
6	5	10
9	0	0
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE group_by_col = 9 OR aggr_col GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	9	91.11	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`group_by_col` = 9) or `test`.`a`.`aggr_col`) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 6: non aggregate field used as non-zero expression.
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
NULL	7	7
0	8	8
3	0	6
6	5	10
9	0	0
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE group_by_col OR (aggr_col < 9) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	9	92.59	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` or (`test`.`a`.`aggr_col` < 9)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 7: aggregate field used in equal exp without a CONST
INSERT INTO a VALUES(1,1),(1,2),(2,1);
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col = group_by_col GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
1	1	1
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col = group_by_col GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	12	100.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` = `test`.`a`.`aggr_col`) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 8: aggregate field used in a non-eq exp without a CONST
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col < group_by_col GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
2	1	1
3	0	2
6	5	5
9	0	0
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col < group_by_col GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	12	33.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` < `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 8
INSERT INTO a VALUES(0,1),(1,0),(0,0);
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col OR group_by_col GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
NULL	7	9
0	1	8
1	0	2
2	1	1
3	0	6
6	5	10
9	0	0
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col OR group_by_col GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	15	99.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` or `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 9
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col AND group_by_col GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
1	1	2
2	1	1
3	2	6
6	5	10
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col AND group_by_col GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	15	81.00	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`aggr_col` and `test`.`a`.`group_by_col`) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
# Scenario 10: Added for completion. This fix does not have an impact.
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
1	1	2
2	1	1
3	2	6
6	5	10
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE aggr_col<>0 AND group_by_col<>0 GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	range	group_by_col_key	group_by_col_key	10	NULL	7	100.00	Using where; Using index for group-by
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where ((`test`.`a`.`aggr_col` <> 0) and (`test`.`a`.`group_by_col` <> 0)) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
0
# Scenario 11: ITEM_FUNC as an argument of ITEM_FUNC
SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col;
group_by_col	MIN(aggr_col)	MAX(aggr_col)
0	1	1
1	0	2
2	1	1
3	0	6
6	5	10
9	0	0
EXPLAIN SELECT group_by_col, MIN(aggr_col), MAX(aggr_col) FROM a
WHERE group_by_col OR (group_by_col < (aggr_col = 1)) GROUP BY group_by_col;
id	select_type	table	partitions	type	possible_keys	key	key_len	ref	rows	filtered	Extra
1	SIMPLE	a	NULL	index	group_by_col_key	group_by_col_key	10	NULL	15	93.33	Using where; Using index
Warnings:
Note	1003	/* select#1 */ select `test`.`a`.`group_by_col` AS `group_by_col`,min(`test`.`a`.`aggr_col`) AS `MIN(aggr_col)`,max(`test`.`a`.`aggr_col`) AS `MAX(aggr_col)` from `test`.`a` where (`test`.`a`.`group_by_col` or (`test`.`a`.`group_by_col` < (`test`.`a`.`aggr_col` = 1))) group by `test`.`a`.`group_by_col`
SELECT TRACE RLIKE 'minmax_keypart_in_disjunctive_query' AS OK
FROM INFORMATION_SCHEMA.OPTIMIZER_TRACE;
OK
1
SET optimizer_trace_max_mem_size=DEFAULT;
SET optimizer_trace=DEFAULT;
SET end_markers_in_json=DEFAULT;
DROP TABLE a;
# End of test for Bug#24423143

Man Man