~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/func_group.test

  • Committer: Monty Taylor
  • Date: 2008-08-09 02:24:34 UTC
  • mto: (266.1.8 codestyle)
  • mto: This revision was merged to the branch mainline in revision 279.
  • Revision ID: monty@inaugust.com-20080809022434-97na8pnugghskxip
Removed mystringslt conv lib and replaced it with a noinst lib.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#
2
 
# simple test of all group functions
3
 
#
4
 
 
5
 
--disable_warnings
6
 
drop table if exists t1,t2;
7
 
--enable_warnings
8
 
 
9
 
set @sav_dpi= @@div_precision_increment;
10
 
set div_precision_increment= 5;
11
 
show variables like 'div_precision_increment';
12
 
create table t1 (grp int, a bigint, c char(10) not null);
13
 
insert into t1 values (1,1,"a");
14
 
insert into t1 values (2,2,"b");
15
 
insert into t1 values (2,3,"c");
16
 
insert into t1 values (3,4,"E");
17
 
insert into t1 values (3,5,"C");
18
 
insert into t1 values (3,6,"D");
19
 
 
20
 
# Test of MySQL field extension with and without matching records.
21
 
select a,c,sum(a) from t1 group by a;
22
 
select a,c,sum(a) from t1 where a > 10 group by a;
23
 
select sum(a) from t1 where a > 10;
24
 
select a from t1 order by rand(10);
25
 
select distinct a from t1 order by rand(10);
26
 
select count(distinct a),count(distinct grp) from t1;
27
 
insert into t1 values (null,null,'');
28
 
select count(distinct a),count(distinct grp) from t1;
29
 
 
30
 
select sum(all a),count(all a),avg(all a),std(all a),variance(all a),bit_or(all a),bit_and(all a),min(all a),max(all a),min(all c),max(all c) from t1;
31
 
select grp, sum(a),count(a),avg(a),std(a),variance(a),bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1 group by grp;
32
 
--disable_warnings
33
 
select grp, sum(a)+count(a)+avg(a)+std(a)+variance(a)+bit_or(a)+bit_and(a)+min(a)+max(a)+min(c)+max(c) as sum from t1 group by grp;
34
 
--enable_warnings
35
 
 
36
 
create table t2 (grp int, a bigint, c char(10));
37
 
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
38
 
 
39
 
# REPLACE ... SELECT doesn't yet work with PS
40
 
replace into t2 select grp, a, c from t1 limit 2,1;
41
 
select * from t2;
42
 
 
43
 
drop table t1,t2;
44
 
 
45
 
#
46
 
# Problem with std()
47
 
#
48
 
 
49
 
CREATE TABLE t1 (id int(11),value1 float(10,2));
50
 
INSERT INTO t1 VALUES (1,0.00),(1,1.00), (1,2.00), (2,10.00), (2,11.00), (2,12.00); 
51
 
CREATE TABLE t2 (id int(11),name char(20)); 
52
 
INSERT INTO t2 VALUES (1,'Set One'),(2,'Set Two'); 
53
 
select id, avg(value1), std(value1), variance(value1) from t1 group by id;
54
 
select name, avg(value1), std(value1), variance(value1) from t1, t2 where t1.id = t2.id group by t1.id;
55
 
drop table t1,t2;
56
 
 
57
 
#
58
 
# Test of bug in left join & avg
59
 
#
60
 
 
61
 
create table t1 (id int not null);
62
 
create table t2 (id int not null,rating int null);
63
 
insert into t1 values(1),(2),(3);
64
 
insert into t2 values(1, 3),(2, NULL),(2, NULL),(3, 2),(3, NULL);
65
 
select t1.id, avg(rating) from t1 left join t2 on ( t1.id = t2.id ) group by t1.id;
66
 
# Test different types with avg()
67
 
select sql_small_result t2.id, avg(rating) from t2 group by t2.id;
68
 
select sql_big_result t2.id, avg(rating) from t2 group by t2.id;
69
 
select sql_small_result t2.id, avg(rating+0.0e0) from t2 group by t2.id;
70
 
select sql_big_result t2.id, avg(rating+0.0e0) from t2 group by t2.id;
71
 
drop table t1,t2;
72
 
 
73
 
#
74
 
# test of count
75
 
#
76
 
create table t1 (a int(6) primary key, c char(10), b text);
77
 
INSERT INTO t1 VALUES (1,'1','1');
78
 
INSERT INTO t1 VALUES (2,'2','2');
79
 
INSERT INTO t1 VALUES (4,'4','4');
80
 
 
81
 
select count(*) from t1;
82
 
select count(*) from t1 where a = 1;
83
 
select count(*) from t1 where a = 100;
84
 
select count(*) from t1 where a >= 10;
85
 
select count(a) from t1 where a = 1;
86
 
select count(a) from t1 where a = 100;
87
 
select count(a) from t1 where a >= 10;
88
 
select count(b) from t1 where b >= 2;
89
 
select count(b) from t1 where b >= 10;
90
 
select count(c) from t1 where c = 10;
91
 
drop table t1;
92
 
 
93
 
#
94
 
# Test of bug in COUNT(i)*(i+0)
95
 
#
96
 
 
97
 
CREATE TABLE t1 (d DATETIME, i INT);
98
 
INSERT INTO t1 VALUES (NOW(), 1);
99
 
SELECT COUNT(i), i, COUNT(i)*i FROM t1 GROUP BY i;
100
 
SELECT COUNT(i), (i+0), COUNT(i)*(i+0) FROM t1 GROUP BY i; 
101
 
DROP TABLE t1;
102
 
 
103
 
#
104
 
# Another SUM() problem with 3.23.2
105
 
#
106
 
 
107
 
create table t1 (
108
 
        num float(5,2),
109
 
        user char(20)
110
 
);
111
 
insert into t1 values (10.3,'nem'),(20.53,'monty'),(30.23,'sinisa');
112
 
insert into t1 values (30.13,'nem'),(20.98,'monty'),(10.45,'sinisa');
113
 
insert into t1 values (5.2,'nem'),(8.64,'monty'),(11.12,'sinisa');
114
 
select sum(num) from t1;
115
 
select sum(num) from t1 group by user;
116
 
drop table t1;
117
 
 
118
 
#
119
 
# Test problem with MIN() optimization in case of null values
120
 
#
121
 
 
122
 
create table t1 (a1 int, a2 char(3), key k1(a1), key k2(a2));
123
 
insert into t1 values(10,'aaa'), (10,null), (10,'bbb'), (20,'zzz');
124
 
create table t2(a1 char(3), a2 int, a3 real, key k1(a1), key k2(a2, a1));
125
 
select * from t1;
126
 
# The following returned NULL in 4.0.10
127
 
select min(a2) from t1;
128
 
select max(t1.a1), max(t2.a2) from t1, t2;
129
 
select max(t1.a1) from t1, t2;
130
 
select max(t2.a2), max(t1.a1) from t1, t2;
131
 
 
132
 
explain select min(a2) from t1;
133
 
explain select max(t1.a1), max(t2.a2) from t1, t2;
134
 
 
135
 
insert into t2 values('AAA', 10, 0.5);
136
 
insert into t2 values('BBB', 20, 1.0);
137
 
select t1.a1, t1.a2, t2.a1, t2.a2 from t1,t2;
138
 
 
139
 
select max(t1.a1), max(t2.a1) from t1, t2 where t2.a2=9;
140
 
select max(t2.a1), max(t1.a1) from t1, t2 where t2.a2=9;
141
 
select t1.a1, t1.a2, t2.a1, t2.a2 from t1 left outer join t2 on t1.a1=10;
142
 
select max(t1.a2) from t1 left outer join t2 on t1.a1=10;
143
 
select max(t2.a1) from t2 left outer join t1 on t2.a2=10 where t2.a2=20;
144
 
select max(t2.a1) from t2 left outer join t1 on t2.a2=10 where t2.a2=10;
145
 
select max(t2.a1) from t1 left outer join t2 on t1.a2=t2.a1 and 1=0 where t2.a1='AAA';
146
 
select max(t1.a2),max(t2.a1) from t1 left outer join t2 on t1.a1=10;
147
 
drop table t1,t2;
148
 
 
149
 
#
150
 
# Test of group function and NULL values
151
 
#
152
 
 
153
 
CREATE TABLE t1 (a int, b int);
154
 
select count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1;
155
 
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
156
 
insert into t1 values (1,null);
157
 
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
158
 
insert into t1 values (1,null);
159
 
insert into t1 values (2,null);
160
 
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
161
 
select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
162
 
insert into t1 values (2,1);
163
 
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
164
 
select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
165
 
insert into t1 values (3,1);
166
 
select a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b) from t1 group by a;
167
 
select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
168
 
explain extended select SQL_BIG_RESULT a,count(b), sum(b), avg(b), std(b), min(b), max(b), bit_and(b), bit_or(b), bit_xor(b) from t1 group by a;
169
 
drop table t1;
170
 
 
171
 
#
172
 
# Bug #1972: test for bit_and(), bit_or() and negative values
173
 
174
 
create table t1 (col int);
175
 
insert into t1 values (-1), (-2), (-3);
176
 
select bit_and(col), bit_or(col) from t1;
177
 
select SQL_BIG_RESULT bit_and(col), bit_or(col) from t1 group by col;
178
 
drop table t1;
179
 
 
180
 
#
181
 
# Bug #3376: avg() and an empty table
182
 
#
183
 
 
184
 
create table t1 (a int);
185
 
select avg(2) from t1;
186
 
drop table t1;
187
 
 
188
 
#
189
 
# Tests to check MIN/MAX query optimization
190
 
#
191
 
 
192
 
# Create database schema
193
 
create table t1(
194
 
  a1 char(3) primary key,
195
 
  a2 int,
196
 
  a3 char(3),
197
 
  a4 real,
198
 
  a5 date,
199
 
  key k1(a2,a3),
200
 
  key k2(a4 desc,a1),
201
 
  key k3(a5,a1)
202
 
);
203
 
create table t2(
204
 
  a1 char(3) primary key,
205
 
  a2 char(17),
206
 
  a3 char(2),
207
 
  a4 char(3),
208
 
  key k1(a3, a2),
209
 
  key k2(a4)
210
 
);
211
 
 
212
 
# Populate table t1
213
 
insert into t1 values('AME',0,'SEA',0.100,date'1942-02-19');
214
 
insert into t1 values('HBR',1,'SEA',0.085,date'1948-03-05');
215
 
insert into t1 values('BOT',2,'SEA',0.085,date'1951-11-29');
216
 
insert into t1 values('BMC',3,'SEA',0.085,date'1958-09-08');
217
 
insert into t1 values('TWU',0,'LAX',0.080,date'1969-10-05');
218
 
insert into t1 values('BDL',0,'DEN',0.080,date'1960-11-27');
219
 
insert into t1 values('DTX',1,'NYC',0.080,date'1961-05-04');
220
 
insert into t1 values('PLS',1,'WDC',0.075,date'1949-01-02');
221
 
insert into t1 values('ZAJ',2,'CHI',0.075,date'1960-06-15');
222
 
insert into t1 values('VVV',2,'MIN',0.075,date'1959-06-28');
223
 
insert into t1 values('GTM',3,'DAL',0.070,date'1977-09-23');
224
 
insert into t1 values('SSJ',null,'CHI',null,date'1974-03-19');
225
 
insert into t1 values('KKK',3,'ATL',null,null);
226
 
insert into t1 values('XXX',null,'MIN',null,null);
227
 
insert into t1 values('WWW',1,'LED',null,null);
228
 
 
229
 
# Populate table t2
230
 
insert into t2 values('TKF','Seattle','WA','AME');
231
 
insert into t2 values('LCC','Los Angeles','CA','TWU');
232
 
insert into t2 values('DEN','Denver','CO','BDL');
233
 
insert into t2 values('SDC','San Diego','CA','TWU');
234
 
insert into t2 values('NOL','New Orleans','LA','GTM');
235
 
insert into t2 values('LAK','Los Angeles','CA','TWU');
236
 
insert into t2 values('AAA','AAA','AA','AME');
237
 
 
238
 
# Show the table contents
239
 
select * from t1;
240
 
select * from t2;
241
 
 
242
 
# Queries with min/max functions 
243
 
# which regular min/max optimization are applied to
244
 
 
245
 
explain 
246
 
select min(a1) from t1;
247
 
select min(a1) from t1;
248
 
explain 
249
 
select max(a4) from t1;
250
 
select max(a4) from t1;
251
 
explain 
252
 
select min(a5), max(a5) from t1;
253
 
select min(a5), max(a5) from t1;
254
 
explain 
255
 
select min(a3) from t1 where a2 = 2;
256
 
select min(a3) from t1 where a2 = 2;
257
 
explain 
258
 
select min(a1), max(a1) from t1 where a4 = 0.080;
259
 
select min(a1), max(a1) from t1 where a4 = 0.080;
260
 
 
261
 
explain 
262
 
select min(t1.a5), max(t2.a3) from t1, t2;
263
 
select min(t1.a5), max(t2.a3) from t1, t2;
264
 
explain 
265
 
select min(t1.a3), max(t2.a2) from t1, t2 where t1.a2 = 0 and t2.a3 = 'CA';
266
 
select min(t1.a3), max(t2.a2) from t1, t2 where t1.a2 = 0 and t2.a3 = 'CA';
267
 
 
268
 
# Queries with min/max functions 
269
 
# which extended min/max optimization are applied to
270
 
 
271
 
explain 
272
 
select min(a1) from t1 where a1 > 'KKK';
273
 
select min(a1) from t1 where a1 > 'KKK';
274
 
explain 
275
 
select min(a1) from t1 where a1 >= 'KKK';
276
 
select min(a1) from t1 where a1 >= 'KKK';
277
 
explain 
278
 
select max(a3) from t1 where a2 = 2 and a3 < 'SEA';
279
 
select max(a3) from t1 where a2 = 2 and a3 < 'SEA';
280
 
explain 
281
 
select max(a5) from t1 where a5 < date'1970-01-01';
282
 
select max(a5) from t1 where a5 < date'1970-01-01';
283
 
explain 
284
 
select max(a3) from t1 where a2 is null;
285
 
select max(a3) from t1 where a2 is null;
286
 
explain 
287
 
select max(a3) from t1 where a2 = 0 and a3 between 'K' and 'Q';
288
 
select max(a3) from t1 where a2 = 0 and a3 between 'K' and 'Q';
289
 
explain
290
 
select min(a1), max(a1) from t1 where a1 between 'A' and 'P';
291
 
select min(a1), max(a1) from t1 where a1 between 'A' and 'P';
292
 
explain 
293
 
select max(a3) from t1 where a3 < 'SEA' and a2 = 2 and a3 <= 'MIN';
294
 
select max(a3) from t1 where a3 < 'SEA' and a2 = 2 and a3 <= 'MIN';
295
 
explain 
296
 
select max(a3) from t1 where a3 = 'MIN' and a2 = 2;
297
 
select max(a3) from t1 where a3 = 'MIN' and a2 = 2;
298
 
explain 
299
 
select max(a3) from t1 where a3 = 'DEN' and a2 = 2;
300
 
select max(a3) from t1 where a3 = 'DEN' and a2 = 2;
301
 
 
302
 
explain
303
 
select max(t1.a3), min(t2.a2) from t1, t2 where t1.a2 = 2 and t1.a3 < 'MIN' and t2.a3 = 'CA';
304
 
select max(t1.a3), min(t2.a2) from t1, t2 where t1.a2 = 2 and t1.a3 < 'MIN' and t2.a3 = 'CA';
305
 
 
306
 
explain
307
 
select max(a3) from t1 where a2 is null and a2 = 2;
308
 
select max(a3) from t1 where a2 is null and a2 = 2;
309
 
 
310
 
explain
311
 
select max(a2) from t1 where a2 >= 1;
312
 
select max(a2) from t1 where a2 >= 1;
313
 
explain
314
 
select min(a3) from t1 where a2 = 2 and a3 < 'SEA';
315
 
select min(a3) from t1 where a2 = 2 and a3 < 'SEA';
316
 
 
317
 
explain
318
 
select min(a3) from t1 where a2 = 4;
319
 
select min(a3) from t1 where a2 = 4;
320
 
explain
321
 
select min(a3) from t1 where a2 = 2 and a3 > 'SEA';
322
 
select min(a3) from t1 where a2 = 2 and a3 > 'SEA';
323
 
explain
324
 
select (min(a4)+max(a4))/2 from t1;
325
 
select (min(a4)+max(a4))/2 from t1;
326
 
explain
327
 
select min(a3) from t1 where 2 = a2;
328
 
select min(a3) from t1 where 2 = a2;
329
 
explain
330
 
select max(a3) from t1 where a2 = 2 and 'SEA' > a3;
331
 
select max(a3) from t1 where a2 = 2 and 'SEA' > a3;
332
 
explain
333
 
select max(a3) from t1 where a2 = 2 and 'SEA' < a3;
334
 
select max(a3) from t1 where a2 = 2 and 'SEA' < a3;
335
 
explain
336
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI';
337
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI';
338
 
explain
339
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI' and a3 < 'SEA';
340
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI' and a3 < 'SEA';
341
 
explain
342
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI' and a3 = 'MIN';
343
 
select min(a3) from t1 where a2 = 2 and a3 >= 'CHI' and a3 = 'MIN';
344
 
explain
345
 
select min(a3) from t1 where a2 = 2 and a3 >= 'SEA' and a3 = 'MIN';
346
 
select min(a3) from t1 where a2 = 2 and a3 >= 'SEA' and a3 = 'MIN';
347
 
 
348
 
explain
349
 
select min(t1.a1), min(t2.a4) from t1,t2 where t1.a1 < 'KKK' and t2.a4 < 'KKK';
350
 
select min(t1.a1), min(t2.a4) from t1,t2 where t1.a1 < 'KKK' and t2.a4 < 'KKK';
351
 
 
352
 
# Queries to which max/min optimization is not applied
353
 
 
354
 
explain 
355
 
select min(a1) from t1 where a1 > 'KKK' or a1 < 'XXX';
356
 
explain 
357
 
select min(a1) from t1 where a1 != 'KKK';
358
 
explain
359
 
select max(a3) from t1 where a2 < 2 and a3 < 'SEA';
360
 
explain
361
 
select max(t1.a3), min(t2.a2) from t1, t2 where t1.a2 = 2 and t1.a3 < 'MIN' and t2.a3 > 'CA';
362
 
 
363
 
explain
364
 
select min(a4 - 0.01) from t1;
365
 
explain
366
 
select max(a4 + 0.01) from t1;
367
 
explain
368
 
select min(a3) from t1 where (a2 +1 ) is null;
369
 
explain
370
 
select min(a3) from t1 where (a2 + 1) = 2;
371
 
explain
372
 
select min(a3) from t1 where 2 = (a2 + 1);
373
 
explain
374
 
select min(a2) from t1 where a2 < 2 * a2 - 8;
375
 
explain
376
 
select min(a1) from t1  where a1 between a3 and 'KKK';
377
 
explain
378
 
select min(a4) from t1  where (a4 + 0.01) between 0.07 and 0.08;
379
 
explain
380
 
select concat(min(t1.a1),min(t2.a4)) from t1, t2 where t2.a4 <> 'AME';
381
 
drop table t1, t2;
382
 
 
383
 
# Moved to func_group_innodb
384
 
#--disable_warnings
385
 
#create table t1 (USR_ID integer not null, MAX_REQ integer not null, constraint PK_SEA_USER primary key (USR_ID)) engine=InnoDB;
386
 
#--enable_warnings
387
 
#insert into t1 values (1, 3);
388
 
#select count(*) + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ + MAX_REQ - MAX_REQ from t1 group by MAX_REQ;
389
 
#select Case When Count(*) < MAX_REQ Then 1 Else 0 End from t1 where t1.USR_ID = 1 group by MAX_REQ;
390
 
#drop table t1;
391
 
 
392
 
 
393
 
create table t1 (a char(10));
394
 
insert into t1 values ('a'),('b'),('c');
395
 
select coercibility(max(a)) from t1;
396
 
drop table t1;
397
 
 
398
 
#
399
 
# Bug #6658 MAX(column) returns incorrect coercibility
400
 
#
401
 
create table t1 (a char character set latin2);
402
 
insert into t1 values ('a'),('b');
403
 
select charset(max(a)), coercibility(max(a)),
404
 
       charset(min(a)), coercibility(min(a)) from t1;
405
 
show create table t1;
406
 
create table t2 select max(a),min(a) from t1;
407
 
show create table t2;
408
 
drop table t2;
409
 
create table t2 select concat(a) from t1;
410
 
show create table t2;
411
 
drop table t2,t1;
412
 
 
413
 
#
414
 
# aggregate functions on static tables
415
 
#
416
 
create table t1 (a int);
417
 
insert into t1 values (1);
418
 
select max(a) as b from t1 having b=1;
419
 
select a from t1 having a=1;
420
 
drop table t1;
421
 
 
422
 
#
423
 
# Bug #3435: variance(const), stddev(const) and an empty table
424
 
#
425
 
 
426
 
create table t1 (a int);
427
 
select variance(2) from t1;
428
 
select stddev(2) from t1;
429
 
drop table t1;
430
 
 
431
 
 
432
 
#
433
 
# cleunup() of optimized away count(*) and max/min
434
 
#
435
 
create table t1 (a int);
436
 
insert into t1 values (1),(2);
437
 
SELECT COUNT(*) FROM t1;
438
 
SELECT COUNT(*) FROM t1;
439
 
SELECT COUNT(*) FROM t1;
440
 
drop table t1;
441
 
 
442
 
create table t1 (a int, primary key(a));
443
 
insert into t1 values (1),(2);
444
 
SELECT max(a) FROM t1;
445
 
SELECT max(a) FROM t1;
446
 
SELECT max(a) FROM t1;
447
 
drop table t1;
448
 
 
449
 
#
450
 
# Bug #5406 min/max optimization for empty set
451
 
#
452
 
 
453
 
CREATE TABLE t1 (a int primary key);
454
 
INSERT INTO t1 VALUES (1),(2),(3),(4);
455
 
 
456
 
SELECT MAX(a) FROM t1 WHERE a > 5;
457
 
SELECT MIN(a) FROM t1 WHERE a < 0;
458
 
 
459
 
DROP TABLE t1;
460
 
 
461
 
#
462
 
# Bug #5555 GROUP BY enum_field" returns incorrect results
463
 
#
464
 
 
465
 
CREATE TABLE t1 (
466
 
  id int(10) NOT NULL auto_increment,
467
 
  val enum('one','two','three') NOT NULL default 'one',
468
 
  PRIMARY KEY  (id)
469
 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
470
 
 
471
 
INSERT INTO t1 VALUES
472
 
(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two');
473
 
 
474
 
select val, count(*) from t1 group by val;
475
 
drop table t1;
476
 
 
477
 
CREATE TABLE t1 (
478
 
  id int(10) NOT NULL auto_increment,
479
 
  val set('one','two','three') NOT NULL default 'one',
480
 
  PRIMARY KEY  (id)
481
 
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
482
 
 
483
 
INSERT INTO t1 VALUES
484
 
(1,'one'),(2,'two'),(3,'three'),(4,'one'),(5,'two');
485
 
 
486
 
select val, count(*) from t1 group by val;
487
 
drop table t1;
488
 
 
489
 
#
490
 
# Bug #5615: type of aggregate function column wrong when using group by
491
 
#
492
 
 
493
 
create table t1(a int, b datetime);
494
 
insert into t1 values (1, NOW()), (2, NOW());
495
 
create table t2 select MAX(b) from t1 group by a;
496
 
show create table t2;
497
 
drop table t1, t2;
498
 
 
499
 
#
500
 
# Bug 7833:  Wrong datatype of aggregate column is returned
501
 
#
502
 
 
503
 
create table t1(f1 datetime);
504
 
insert into t1 values (now());
505
 
create table t2 select f2 from (select max(now()) f2 from t1) a;
506
 
show columns from t2;
507
 
drop table t2;
508
 
create table t2 select f2 from (select now() f2 from t1) a;
509
 
show columns from t2;
510
 
drop table t2, t1;
511
 
 
512
 
#
513
 
# Bug 8893: wrong result for min/max optimization with 2 indexes
514
 
#
515
 
 
516
 
CREATE TABLE t1(
517
 
  id int PRIMARY KEY,
518
 
  a  int,
519
 
  b  int,
520
 
  INDEX i_b_id(a,b,id),
521
 
  INDEX i_id(a,id)
522
 
);
523
 
INSERT INTO t1 VALUES 
524
 
  (1,1,4), (2,2,1), (3,1,3), (4,2,1), (5,1,1);
525
 
SELECT MAX(id) FROM t1 WHERE id < 3 AND a=2 AND b=6;
526
 
DROP TABLE t1;
527
 
 
528
 
# change the order of the last two index definitions
529
 
 
530
 
CREATE TABLE t1(
531
 
  id int PRIMARY KEY,
532
 
  a  int,
533
 
  b  int,
534
 
  INDEX i_id(a,id),
535
 
  INDEX i_b_id(a,b,id)
536
 
);
537
 
INSERT INTO t1 VALUES 
538
 
  (1,1,4), (2,2,1), (3,1,3), (4,2,1), (5,1,1);
539
 
SELECT MAX(id) FROM t1 WHERE id < 3 AND a=2 AND b=6;
540
 
DROP TABLE t1;
541
 
 
542
 
 
543
 
#
544
 
# Bug #12882    min/max inconsistent on empty table
545
 
#
546
 
# Test case moved to func_group_innodb
547
 
#
548
 
# Bug #18206: min/max optimization cannot be applied to partial index
549
 
#
550
 
 
551
 
CREATE TABLE t1 (id int PRIMARY KEY, b char(3), INDEX(b));
552
 
INSERT INTO t1 VALUES (1,'xx'), (2,'aa');
553
 
SELECT * FROM t1;
554
 
 
555
 
SELECT MAX(b) FROM t1 WHERE b < 'ppppp';
556
 
SHOW WARNINGS;
557
 
SELECT MAX(b) FROM t1 WHERE b < 'pp';
558
 
DROP TABLE t1;
559
 
 
560
 
CREATE TABLE t1 (id int PRIMARY KEY, b char(16), INDEX(b(4)));
561
 
INSERT INTO t1 VALUES (1, 'xxxxbbbb'), (2, 'xxxxaaaa');
562
 
SELECT MAX(b) FROM t1;
563
 
EXPLAIN SELECT MAX(b) FROM t1;
564
 
DROP TABLE t1;
565
 
 
566
 
CREATE TABLE t1 (id int , b varchar(512), INDEX(b(250))) COLLATE latin1_bin;
567
 
INSERT INTO t1 VALUES
568
 
  (1,CONCAT(REPEAT('_', 250), "qq")), (1,CONCAT(REPEAT('_', 250), "zz")),
569
 
  (1,CONCAT(REPEAT('_', 250), "aa")), (1,CONCAT(REPEAT('_', 250), "ff"));
570
 
 
571
 
SELECT MAX(b) FROM t1;
572
 
EXPLAIN SELECT MAX(b) FROM t1;
573
 
DROP TABLE t1;
574
 
#
575
 
# Bug #16792  query with subselect, join, and group not returning proper values
576
 
#
577
 
CREATE TABLE t1 (a INT, b INT);
578
 
INSERT INTO t1 VALUES (1,1),(1,2),(2,3);
579
 
 
580
 
SELECT (SELECT COUNT(DISTINCT t1.b)) FROM t1 GROUP BY t1.a;
581
 
SELECT (SELECT COUNT(DISTINCT 12)) FROM t1 GROUP BY t1.a;
582
 
# an attempt to test all aggregate function with no table.
583
 
SELECT AVG(2), BIT_AND(2), BIT_OR(2), BIT_XOR(2), COUNT(*), COUNT(12),
584
 
       COUNT(DISTINCT 12), MIN(2),MAX(2),STD(2), VARIANCE(2),SUM(2),
585
 
       GROUP_CONCAT(2),GROUP_CONCAT(DISTINCT 2);
586
 
DROP TABLE t1;
587
 
 
588
 
# End of 4.1 tests
589
 
 
590
 
#
591
 
# decimal-related tests
592
 
#
593
 
create table t2 (ff double);
594
 
insert into t2 values (2.2);
595
 
select cast(sum(distinct ff) as decimal(5,2)) from t2;
596
 
select cast(sum(distinct ff) as signed) from t2;
597
 
select cast(variance(ff) as decimal(10,3)) from t2;
598
 
select cast(min(ff) as decimal(5,2)) from t2;
599
 
 
600
 
create table t1 (df decimal(5,1));
601
 
insert into t1 values(1.1);
602
 
insert into t1 values(2.2);
603
 
select cast(sum(distinct df) as signed) from t1;
604
 
select cast(min(df) as signed) from t1;
605
 
select 1e8 * sum(distinct df) from t1;
606
 
select 1e8 * min(df) from t1;
607
 
 
608
 
create table t3 (ifl int);
609
 
insert into t3 values(1), (2);
610
 
select cast(min(ifl) as decimal(5,2)) from t3;
611
 
 
612
 
drop table t1, t2, t3;
613
 
 
614
 
 
615
 
#
616
 
# BUG#3190, WL#1639: Standard Deviation STDDEV - 2 different calculations
617
 
#
618
 
 
619
 
CREATE TABLE t1 (id int(11),value1 float(10,2));
620
 
INSERT INTO t1 VALUES (1,0.00),(1,1.00), (1,2.00), (2,10.00), (2,11.00), (2,12.00), (2,13.00);
621
 
select id, stddev_pop(value1), var_pop(value1), stddev_samp(value1), var_samp(value1) from t1 group by id;
622
 
DROP TABLE t1;
623
 
 
624
 
#
625
 
# BUG#8464 decimal AVG returns incorrect result
626
 
#
627
 
 
628
 
CREATE TABLE t1 (col1 decimal(16,12));
629
 
INSERT INTO t1 VALUES (-5.00000000001),(-5.00000000002),(-5.00000000003),(-5.00000000000),(-5.00000000001),(-5.00000000002);
630
 
insert into t1 select * from t1;
631
 
select col1,count(col1),sum(col1),avg(col1) from t1 group by col1;
632
 
DROP TABLE t1;
633
 
 
634
 
#
635
 
# BUG#8465 decimal MIN and MAX return incorrect result
636
 
#
637
 
 
638
 
create table t1 (col1 decimal(16,12));
639
 
insert into t1 values (-5.00000000001);
640
 
insert into t1 values (-5.00000000001);
641
 
select col1,sum(col1),max(col1),min(col1) from t1 group by col1;
642
 
delete from t1;
643
 
insert into t1 values (5.00000000001);
644
 
insert into t1 values (5.00000000001);
645
 
select col1,sum(col1),max(col1),min(col1) from t1 group by col1;
646
 
DROP TABLE t1;
647
 
 
648
 
#
649
 
# Test that new VARCHAR correctly works with COUNT(DISTINCT)
650
 
#
651
 
 
652
 
CREATE TABLE t1 (a VARCHAR(400));
653
 
INSERT INTO t1 (a) VALUES ("A"), ("a"), ("a "), ("a   "),
654
 
                          ("B"), ("b"), ("b "), ("b   ");
655
 
SELECT COUNT(DISTINCT a) FROM t1;
656
 
DROP TABLE t1;
657
 
 
658
 
#
659
 
# Test for buf #9210: GROUP BY with expression if a decimal type
660
 
#
661
 
 
662
 
CREATE TABLE t1 (a int, b int, c int);
663
 
INSERT INTO t1 (a, b, c) VALUES
664
 
  (1,1,1), (1,1,2), (1,1,3),
665
 
  (1,2,1), (1,2,2), (1,2,3),
666
 
  (1,3,1), (1,3,2), (1,3,3),
667
 
  (2,1,1), (2,1,2), (2,1,3),
668
 
  (2,2,1), (2,2,2), (2,2,3),
669
 
  (2,3,1), (2,3,2), (2,3,3),
670
 
  (3,1,1), (3,1,2), (3,1,3),
671
 
  (3,2,1), (3,2,2), (3,2,3),
672
 
  (3,3,1), (3,3,2), (3,3,3);
673
 
 
674
 
SELECT b/c as v, a FROM t1 ORDER BY v;
675
 
SELECT b/c as v, SUM(a) FROM t1 GROUP BY v;
676
 
SELECT SUM(a) FROM t1 GROUP BY b/c;
677
 
 
678
 
DROP TABLE t1;
679
 
set div_precision_increment= @sav_dpi;
680
 
 
681
 
#
682
 
# Bug #20868: Client connection is broken on SQL query error
683
 
#
684
 
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
685
 
INSERT INTO t1 VALUES (1,1), (2,2);
686
 
 
687
 
CREATE TABLE t2 (a INT PRIMARY KEY, b INT);
688
 
INSERT INTO t2 VALUES (1,1), (3,3);
689
 
 
690
 
SELECT SQL_NO_CACHE 
691
 
  (SELECT SUM(c.a) FROM t1 ttt, t2 ccc 
692
 
   WHERE ttt.a = ccc.b AND ttt.a = t.a GROUP BY ttt.a) AS minid   
693
 
FROM t1 t, t2 c WHERE t.a = c.b;
694
 
 
695
 
DROP TABLE t1,t2;
696
 
 
697
 
#
698
 
# Bug #10966: Variance functions return wrong data type
699
 
#
700
 
 
701
 
create table t1 select variance(0);                                               
702
 
show create table t1;                                                           
703
 
drop table t1;                                                                  
704
 
create table t1 select stddev(0);
705
 
show create table t1;
706
 
drop table t1;
707
 
 
708
 
 
709
 
#
710
 
# Bug#22555: STDDEV yields positive result for groups with only one row
711
 
#
712
 
 
713
 
create table bug22555 (i int primary key auto_increment, s1 int, s2 int, e decimal(30,10), o double);
714
 
insert into bug22555 (s1, s2, e, o) values (53, 78, 11.4276528, 6.828112), (17, 78, 5.916793, 1.8502951), (18, 76, 2.679231, 9.17975591), (31, 62, 6.07831, 0.1), (19, 41, 5.37463, 15.1), (83, 73, 14.567426, 7.959222), (92, 53, 6.10151, 13.1856852), (7, 12, 13.92272, 3.442007), (92, 35, 11.95358909, 6.01376678), (38, 84, 2.572, 7.904571);
715
 
select std(s1/s2) from bug22555 group by i;
716
 
select std(e) from bug22555 group by i;
717
 
select std(o) from bug22555 group by i;
718
 
drop table bug22555;
719
 
 
720
 
create table bug22555 (i int, s1 int, s2 int, o1 double, o2 double, e1 decimal, e2 decimal);
721
 
insert into bug22555 values (1,53,78,53,78,53,78),(2,17,78,17,78,17,78),(3,18,76,18,76,18,76);
722
 
select i, count(*) from bug22555 group by i;
723
 
select std(s1/s2) from bug22555 where i=1;
724
 
select std(s1/s2) from bug22555 where i=2;
725
 
select std(s1/s2) from bug22555 where i=3;
726
 
select std(s1/s2) from bug22555 where i=1 group by i;
727
 
select std(s1/s2) from bug22555 where i=2 group by i;
728
 
select std(s1/s2) from bug22555 where i=3 group by i;
729
 
select std(s1/s2) from bug22555 group by i order by i;
730
 
select i, count(*), std(o1/o2) from bug22555 group by i order by i;
731
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
732
 
set @saved_div_precision_increment=@@div_precision_increment;
733
 
set div_precision_increment=19;
734
 
select i, count(*), variance(s1/s2) from bug22555 group by i order by i;
735
 
select i, count(*), variance(o1/o2) from bug22555 group by i order by i;
736
 
select i, count(*), variance(e1/e2) from bug22555 group by i order by i;
737
 
select i, count(*), std(s1/s2) from bug22555 group by i order by i;
738
 
select i, count(*), std(o1/o2) from bug22555 group by i order by i;
739
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
740
 
set div_precision_increment=20;
741
 
select i, count(*), variance(s1/s2) from bug22555 group by i order by i;
742
 
select i, count(*), variance(o1/o2) from bug22555 group by i order by i;
743
 
select i, count(*), variance(e1/e2) from bug22555 group by i order by i;
744
 
select i, count(*), std(s1/s2) from bug22555 group by i order by i;
745
 
select i, count(*), std(o1/o2) from bug22555 group by i order by i;
746
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
747
 
set @@div_precision_increment=@saved_div_precision_increment;
748
 
insert into bug22555 values (1,53,78,53,78,53,78),(2,17,78,17,78,17,78),(3,18,76,18,76,18,76);
749
 
insert into bug22555 values (1,53,78,53,78,53,78),(2,17,78,17,78,17,78),(3,18,76,18,76,18,76);
750
 
insert into bug22555 values (1,53,78,53,78,53,78),(2,17,78,17,78,17,78),(3,18,76,18,76,18,76);
751
 
 
752
 
select i, count(*), std(s1/s2) from bug22555 group by i order by i;
753
 
select i, count(*), round(std(o1/o2), 16) from bug22555 group by i order by i;
754
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
755
 
select std(s1/s2) from bug22555;
756
 
select std(o1/o2) from bug22555;
757
 
select std(e1/e2) from bug22555;
758
 
set @saved_div_precision_increment=@@div_precision_increment;
759
 
set div_precision_increment=19;
760
 
select i, count(*), std(s1/s2) from bug22555 group by i order by i;
761
 
select i, count(*), round(std(o1/o2), 16) from bug22555 group by i order by i;
762
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
763
 
select round(std(s1/s2), 17) from bug22555;
764
 
select std(o1/o2) from bug22555;
765
 
select round(std(e1/e2), 17) from bug22555;
766
 
set div_precision_increment=20;
767
 
select i, count(*), std(s1/s2) from bug22555 group by i order by i;
768
 
select i, count(*), round(std(o1/o2), 16) from bug22555 group by i order by i;
769
 
select i, count(*), std(e1/e2) from bug22555 group by i order by i;
770
 
select round(std(s1/s2), 17) from bug22555;
771
 
select std(o1/o2) from bug22555;
772
 
select round(std(e1/e2), 17) from bug22555;
773
 
set @@div_precision_increment=@saved_div_precision_increment;
774
 
drop table bug22555;
775
 
 
776
 
create table bug22555 (s int, o double, e decimal);
777
 
insert into bug22555 values (1,1,1),(2,2,2),(3,3,3),(6,6,6),(7,7,7);
778
 
select var_samp(s), var_pop(s) from bug22555;
779
 
select var_samp(o), var_pop(o) from bug22555;
780
 
select var_samp(e), var_pop(e) from bug22555;
781
 
drop table bug22555;
782
 
 
783
 
create table bug22555 (s int, o double, e decimal);
784
 
insert into bug22555 values (null,null,null),(null,null,null);
785
 
select var_samp(s) as 'null', var_pop(s) as 'null' from bug22555;
786
 
select var_samp(o) as 'null', var_pop(o) as 'null' from bug22555;
787
 
select var_samp(e) as 'null', var_pop(e) as 'null' from bug22555;
788
 
insert into bug22555 values (1,1,1);
789
 
select var_samp(s) as 'null', var_pop(s) as '0' from bug22555;
790
 
select var_samp(o) as 'null', var_pop(o) as '0' from bug22555;
791
 
select var_samp(e) as 'null', var_pop(e) as '0' from bug22555;
792
 
insert into bug22555 values (2,2,2);
793
 
select var_samp(s) as '0.5', var_pop(s) as '0.25' from bug22555;
794
 
select var_samp(o) as '0.5', var_pop(o) as '0.25' from bug22555;
795
 
select var_samp(e) as '0.5', var_pop(e) as '0.25' from bug22555;
796
 
drop table bug22555;
797
 
 
798
 
 
799
 
#
800
 
# Bug #21976: Unnecessary warning with count(decimal)
801
 
#
802
 
 
803
 
create table t1 (a decimal(20));
804
 
insert into t1 values (12345678901234567890);
805
 
select count(a) from t1;
806
 
select count(distinct a) from t1;
807
 
drop table t1;
808
 
 
809
 
#
810
 
# Bug #23184: SELECT causes server crash
811
 
812
 
CREATE TABLE t1 (a INT, b INT);
813
 
INSERT INTO t1 VALUES (1,1),(1,2),(1,3),(1,4),(1,5),(1,6),(1,7),(1,8);
814
 
INSERT INTO t1 SELECT a, b+8       FROM t1;
815
 
INSERT INTO t1 SELECT a, b+16      FROM t1;
816
 
INSERT INTO t1 SELECT a, b+32      FROM t1;
817
 
INSERT INTO t1 SELECT a, b+64      FROM t1;
818
 
INSERT INTO t1 SELECT a, b+128     FROM t1;
819
 
INSERT INTO t1 SELECT a, b+256     FROM t1;
820
 
INSERT INTO t1 SELECT a, b+512     FROM t1;
821
 
INSERT INTO t1 SELECT a, b+1024    FROM t1;
822
 
INSERT INTO t1 SELECT a, b+2048    FROM t1;
823
 
INSERT INTO t1 SELECT a, b+4096    FROM t1;
824
 
INSERT INTO t1 SELECT a, b+8192    FROM t1;
825
 
INSERT INTO t1 SELECT a, b+16384   FROM t1;
826
 
INSERT INTO t1 SELECT a, b+32768   FROM t1;
827
 
SELECT a,COUNT(DISTINCT b) AS cnt FROM t1 GROUP BY a HAVING cnt > 50;
828
 
SELECT a,SUM(DISTINCT b) AS sumation FROM t1 GROUP BY a HAVING sumation > 50;
829
 
SELECT a,AVG(DISTINCT b) AS average FROM t1 GROUP BY a HAVING average > 50;
830
 
 
831
 
DROP TABLE t1;
832
 
 
833
 
#
834
 
# Bug #27573: MIN() on an indexed column which is always NULL sets _other_ 
835
 
# results to NULL
836
 
#
837
 
CREATE TABLE t1 ( a INT, b INT, KEY(a) );
838
 
INSERT INTO t1 VALUES (NULL, 1), (NULL, 2);
839
 
EXPLAIN SELECT MIN(a), MIN(b) FROM t1;
840
 
SELECT MIN(a), MIN(b) FROM t1;
841
 
 
842
 
CREATE TABLE t2( a INT, b INT, c INT, KEY(a, b) );
843
 
INSERT INTO t2 ( a, b, c ) VALUES ( 1, NULL, 2 ), ( 1, 3, 4 ), ( 1, 4, 4 );
844
 
EXPLAIN SELECT MIN(b), MIN(c) FROM t2 WHERE a = 1;
845
 
SELECT MIN(b), MIN(c) FROM t2 WHERE a = 1;
846
 
 
847
 
CREATE TABLE t3 (a INT, b INT, c int, KEY(a, b));
848
 
INSERT INTO t3 VALUES (1, NULL, 1), (2, NULL, 2),  (2, NULL, 2),  (3, NULL, 3);
849
 
EXPLAIN SELECT MIN(a), MIN(b) FROM t3 where a = 2;
850
 
SELECT MIN(a), MIN(b) FROM t3 where a = 2;
851
 
 
852
 
CREATE TABLE t4 (a INT, b INT, c int, KEY(a, b));
853
 
INSERT INTO t4 VALUES (1, 1, 1), (2, NULL, 2),  (2, NULL, 2),  (3, 1, 3);
854
 
EXPLAIN SELECT MIN(a), MIN(b) FROM t4 where a = 2;
855
 
SELECT MIN(a), MIN(b) FROM t4 where a = 2;
856
 
SELECT MIN(b), min(c) FROM t4 where a = 2;
857
 
 
858
 
CREATE TABLE t5( a INT, b INT, KEY( a, b) ); 
859
 
INSERT INTO t5 VALUES( 1, 1 ), ( 1, 2 );
860
 
EXPLAIN SELECT MIN(a), MIN(b) FROM t5 WHERE a = 1;
861
 
SELECT MIN(a), MIN(b) FROM t5 WHERE a = 1;
862
 
SELECT MIN(a), MIN(b) FROM t5 WHERE a = 1 and b > 1;
863
 
 
864
 
DROP TABLE t1, t2, t3, t4, t5;
865
 
 
866
 
#
867
 
# Bug #30715: Assertion failed: item_field->field->real_maybe_null(), file
868
 
# .\opt_sum.cc, line
869
 
#
870
 
 
871
 
CREATE TABLE t1 (a int, b date NOT NULL, KEY k1 (a,b));
872
 
SELECT MIN(b) FROM t1 WHERE a=1 AND b>'2007-08-01';
873
 
DROP TABLE t1;
874
 
 
875
 
#
876
 
# Bug #34512: CAST( AVG( double ) AS DECIMAL ) returns wrong results
877
 
#
878
 
 
879
 
CREATE TABLE t1(a DOUBLE);
880
 
INSERT INTO t1 VALUES (10), (20);
881
 
SELECT AVG(a), CAST(AVG(a) AS DECIMAL) FROM t1;
882
 
 
883
 
DROP TABLE t1;
884
 
 
885
 
###
886
 
--echo End of 5.0 tests