~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to tests/t/group_by.test

  • Committer: Brian Aker
  • Date: 2008-09-04 19:31:00 UTC
  • Revision ID: brian@tangent.org-20080904193100-l849hgghfy4urj43
Changing default character set from this point on.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
# Initialise
3
 
--disable_warnings
4
 
drop table if exists t1,t2,t3;
5
 
--enable_warnings
6
 
 
7
 
#
8
 
# Simple test without tables
9
 
 
10
 
SELECT 1 FROM (SELECT 1) as a  GROUP BY SUM(1);
11
 
 
12
 
#
13
 
# Test of group (Failed for Lars Hoss <lh@pbm.de>)
14
 
#
15
 
 
16
 
CREATE TABLE t1 (
17
 
  spID int,
18
 
  userID int,
19
 
  score int,
20
 
  lsg char(40),
21
 
  date date
22
 
);
23
 
 
24
 
INSERT INTO t1 VALUES (1,1,1,'','0000-00-00');
25
 
INSERT INTO t1 VALUES (2,2,2,'','0000-00-00');
26
 
INSERT INTO t1 VALUES (2,1,1,'','0000-00-00');
27
 
INSERT INTO t1 VALUES (3,3,3,'','0000-00-00');
28
 
 
29
 
CREATE TABLE t2 (
30
 
  userID int NOT NULL auto_increment,
31
 
  niName char(15),
32
 
  passwd char(8),
33
 
  mail char(50),
34
 
  isAukt enum('N','Y') DEFAULT 'N',
35
 
  vName char(30),
36
 
  nName char(40),
37
 
  adr char(60),
38
 
  plz char(5),
39
 
  ort char(35),
40
 
  land char(20),
41
 
  PRIMARY KEY (userID)
42
 
);
43
 
 
44
 
INSERT INTO t2 VALUES (1,'name','pass','mail','Y','v','n','adr','1','1','1');
45
 
INSERT INTO t2 VALUES (2,'name','pass','mail','Y','v','n','adr','1','1','1');
46
 
INSERT INTO t2 VALUES (3,'name','pass','mail','Y','v','n','adr','1','1','1');
47
 
INSERT INTO t2 VALUES (4,'name','pass','mail','Y','v','n','adr','1','1','1');
48
 
INSERT INTO t2 VALUES (5,'name','pass','mail','Y','v','n','adr','1','1','1');
49
 
 
50
 
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID GROUP BY t2.userid;
51
 
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID GROUP BY t2.userid ORDER BY NULL;
52
 
SELECT t2.userid, MIN(t1.score) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid;
53
 
SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid;
54
 
SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid ORDER BY NULL;
55
 
EXPLAIN SELECT t2.userid, MIN(t1.score+0.0) FROM t1, t2 WHERE t1.userID=t2.userID AND t1.spID=2  GROUP BY t2.userid ORDER BY NULL;
56
 
drop table t1,t2;
57
 
 
58
 
#
59
 
# Bug in GROUP BY, by Nikki Chumakov <nikki@saddam.cityline.ru>
60
 
#
61
 
 
62
 
CREATE TABLE t1 (
63
 
  PID int NOT NULL auto_increment,
64
 
  payDate date DEFAULT '0000-00-00' NOT NULL,
65
 
  recDate datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
66
 
  URID int DEFAULT '0' NOT NULL,
67
 
  CRID int DEFAULT '0' NOT NULL,
68
 
  amount int DEFAULT '0' NOT NULL,
69
 
  operator int,
70
 
  method enum('unknown','cash','dealer','check','card','lazy','delayed','test') DEFAULT 'unknown' NOT NULL,
71
 
  DIID int,
72
 
  reason char(1) binary DEFAULT '' NOT NULL,
73
 
  code_id int,
74
 
  qty int DEFAULT '0' NOT NULL,
75
 
  PRIMARY KEY (PID),
76
 
  KEY URID (URID),
77
 
  KEY reason (reason),
78
 
  KEY method (method),
79
 
  KEY payDate (payDate)
80
 
);
81
 
 
82
 
INSERT INTO t1 VALUES (1,'1970-01-01','1997-10-17 00:00:00',2529,1,21000,11886,'check',0,'F',16200,6);
83
 
 
84
 
--error 1056
85
 
SELECT COUNT(P.URID),SUM(P.amount),P.method, MIN(PP.recdate+0) > 19980501000000   AS IsNew FROM t1 AS P JOIN t1 as PP WHERE P.URID = PP.URID GROUP BY method,IsNew;
86
 
 
87
 
drop table t1;
88
 
 
89
 
#
90
 
# Problem with GROUP BY + ORDER BY when no match
91
 
# Tested with locking
92
 
#
93
 
 
94
 
CREATE TABLE t1 (
95
 
  cid int NOT NULL auto_increment,
96
 
  firstname varchar(32) DEFAULT '' NOT NULL,
97
 
  surname varchar(32) DEFAULT '' NOT NULL,
98
 
  PRIMARY KEY (cid)
99
 
);
100
 
INSERT INTO t1 VALUES (1,'That','Guy');
101
 
INSERT INTO t1 VALUES (2,'Another','Gent');
102
 
 
103
 
CREATE TABLE t2 (
104
 
  call_id int NOT NULL auto_increment,
105
 
  contact_id int DEFAULT '0' NOT NULL,
106
 
  PRIMARY KEY (call_id),
107
 
  KEY contact_id (contact_id)
108
 
);
109
 
 
110
 
lock tables t1 read,t2 write;
111
 
 
112
 
INSERT INTO t2 VALUES (10,2);
113
 
INSERT INTO t2 VALUES (18,2);
114
 
INSERT INTO t2 VALUES (62,2);
115
 
INSERT INTO t2 VALUES (91,2);
116
 
INSERT INTO t2 VALUES (92,2);
117
 
 
118
 
SELECT cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid;
119
 
SELECT cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid ORDER BY NULL;
120
 
SELECT HIGH_PRIORITY cid, CONCAT(firstname, ' ', surname), COUNT(call_id) FROM t1 LEFT JOIN t2 ON cid=contact_id WHERE firstname like '%foo%' GROUP BY cid ORDER BY surname, firstname;
121
 
 
122
 
drop table t2;
123
 
unlock tables;
124
 
drop table t1;
125
 
 
126
 
# Test needs to be rewritten
127
 
##
128
 
## Test of group by bug in bugzilla
129
 
##
130
 
#
131
 
#CREATE TABLE t1 (
132
 
#  bug_id int NOT NULL auto_increment,
133
 
#  groupset bigint DEFAULT '0' NOT NULL,
134
 
#  assigned_to int DEFAULT '0' NOT NULL,
135
 
#  bug_file_loc text,
136
 
#  bug_severity enum('blocker','critical','major','normal','minor','trivial','enhancement') DEFAULT 'blocker' NOT NULL,
137
 
#  bug_status enum('','NEW','ASSIGNED','REOPENED','RESOLVED','VERIFIED','CLOSED') DEFAULT 'NEW' NOT NULL,
138
 
#  creation_ts datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
139
 
#  delta_ts timestamp,
140
 
#  short_desc mediumtext,
141
 
#  long_desc mediumtext,
142
 
#  op_sys enum('All','Windows 3.1','Windows 95','Windows 98','Windows NT','Windows 2000','Linux','other') DEFAULT 'All' NOT NULL,
143
 
#  priority enum('P1','P2','P3','P4','P5') DEFAULT 'P1' NOT NULL,
144
 
#  product varchar(64) DEFAULT '' NOT NULL,
145
 
#  rep_platform enum('All','PC','VTD-8','Other'),
146
 
#  reporter int DEFAULT '0' NOT NULL,
147
 
#  version varchar(16) DEFAULT '' NOT NULL,
148
 
#  component varchar(50) DEFAULT '' NOT NULL,
149
 
#  resolution enum('','FIXED','INVALID','WONTFIX','LATER','REMIND','DUPLICATE','WORKSFORME') DEFAULT '' NOT NULL,
150
 
#  target_milestone varchar(20) DEFAULT '' NOT NULL,
151
 
#  qa_contact int DEFAULT '0' NOT NULL,
152
 
#  status_whiteboard mediumtext NOT NULL,
153
 
#  votes int DEFAULT '0' NOT NULL,
154
 
#  PRIMARY KEY (bug_id),
155
 
#  KEY assigned_to (assigned_to),
156
 
#  KEY creation_ts (creation_ts),
157
 
#  KEY delta_ts (delta_ts),
158
 
#  KEY bug_severity (bug_severity),
159
 
#  KEY bug_status (bug_status),
160
 
#  KEY op_sys (op_sys),
161
 
#  KEY priority (priority),
162
 
#  KEY product (product),
163
 
#  KEY reporter (reporter),
164
 
#  KEY version (version),
165
 
#  KEY component (component),
166
 
#  KEY resolution (resolution),
167
 
#  KEY target_milestone (target_milestone),
168
 
#  KEY qa_contact (qa_contact),
169
 
#  KEY votes (votes)
170
 
#);
171
 
#
172
 
#--error 1265
173
 
#INSERT INTO t1 VALUES (1,0,0,'','normal','','2000-02-10 09:25:12',20000321114747,'','','Linux','P1','TestProduct','PC',3,'other','TestComponent','','M1',0,'',0);
174
 
#INSERT INTO t1 VALUES (9,0,0,'','enhancement','','2000-03-10 11:49:36',20000321114747,'','','All','P5','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - conversion','','',0,'',0);
175
 
#INSERT INTO t1 VALUES (10,0,0,'','enhancement','','2000-03-10 18:10:16',20000321114747,'','','All','P4','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - conversion','','',0,'',0);
176
 
#INSERT INTO t1 VALUES (7,0,0,'','critical','','2000-03-09 10:50:21',20000321114747,'','','All','P1','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - generic','','',0,'',0);
177
 
#INSERT INTO t1 VALUES (6,0,0,'','normal','','2000-03-09 10:42:44',20000321114747,'','','All','P2','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
178
 
#INSERT INTO t1 VALUES (8,0,0,'','major','','2000-03-09 11:32:14',20000321114747,'','','All','P3','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
179
 
#INSERT INTO t1 VALUES (5,0,0,'','enhancement','','2000-03-09 10:38:59',20000321114747,'','','All','P5','CCC/CCCCCC','PC',5,'7.00','Administration','','',0,'',0);
180
 
#INSERT INTO t1 VALUES (4,0,0,'','normal','','2000-03-08 18:32:14',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent2','','',0,'',0);
181
 
#INSERT INTO t1 VALUES (3,0,0,'','normal','','2000-03-08 18:30:52',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent','','',0,'',0);
182
 
#INSERT INTO t1 VALUES (2,0,0,'','enhancement','','2000-03-08 18:24:51',20000321114747,'','','All','P2','TestProduct','Other',4,'other','TestComponent2','','',0,'',0);
183
 
#INSERT INTO t1 VALUES (11,0,0,'','blocker','','2000-03-13 09:43:41',20000321114747,'','','All','P2','CCC/CCCCCC','PC',5,'7.00','DDDDDDDDD','','',0,'',0);
184
 
#INSERT INTO t1 VALUES (12,0,0,'','normal','','2000-03-13 16:14:31',20000321114747,'','','All','P2','AAAAA','PC',3,'2.00 CD - Pre','kkkkkkkkkkk lllllllllll','','',0,'',0);
185
 
#INSERT INTO t1 VALUES (13,0,0,'','normal','','2000-03-15 16:20:44',20000321114747,'','','other','P2','TestProduct','Other',3,'other','TestComponent','','',0,'',0);
186
 
#INSERT INTO t1 VALUES (14,0,0,'','blocker','','2000-03-15 18:13:47',20000321114747,'','','All','P1','AAAAA','PC',3,'2.00 CD - Pre','BBBBBBBBBBBBB - generic','','',0,'',0);
187
 
#INSERT INTO t1 VALUES (15,0,0,'','minor','','2000-03-16 18:03:28',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','DDDDDDDDD','','',0,'',0);
188
 
#INSERT INTO t1 VALUES (16,0,0,'','normal','','2000-03-16 18:33:41',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
189
 
#INSERT INTO t1 VALUES (17,0,0,'','normal','','2000-03-16 18:34:18',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
190
 
#INSERT INTO t1 VALUES (18,0,0,'','normal','','2000-03-16 18:34:56',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
191
 
#INSERT INTO t1 VALUES (19,0,0,'','enhancement','','2000-03-16 18:35:34',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
192
 
#INSERT INTO t1 VALUES (20,0,0,'','enhancement','','2000-03-16 18:36:23',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
193
 
#INSERT INTO t1 VALUES (21,0,0,'','enhancement','','2000-03-16 18:37:23',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
194
 
#INSERT INTO t1 VALUES (22,0,0,'','enhancement','','2000-03-16 18:38:16',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','Administration','','',0,'',0);
195
 
#INSERT INTO t1 VALUES (23,0,0,'','normal','','2000-03-16 18:58:12',20000321114747,'','','All','P2','CCC/CCCCCC','Other',5,'7.00','DDDDDDDDD','','',0,'',0);
196
 
#INSERT INTO t1 VALUES (24,0,0,'','normal','','2000-03-17 11:08:10',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
197
 
#INSERT INTO t1 VALUES (25,0,0,'','normal','','2000-03-17 11:10:45',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
198
 
#INSERT INTO t1 VALUES (26,0,0,'','normal','','2000-03-17 11:15:47',20000321114747,'','','All','P2','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
199
 
#INSERT INTO t1 VALUES (27,0,0,'','normal','','2000-03-17 17:45:41',20000321114747,'','','All','P2','CCC/CCCCCC','PC',5,'7.00','DDDDDDDDD','','',0,'',0);
200
 
#INSERT INTO t1 VALUES (28,0,0,'','normal','','2000-03-20 09:51:45',20000321114747,'','','Windows NT','P2','TestProduct','PC',8,'other','TestComponent','','',0,'',0);
201
 
#INSERT INTO t1 VALUES (29,0,0,'','normal','','2000-03-20 11:15:09',20000321114747,'','','All','P5','AAAAAAAA-AAA','PC',3,'2.8','Web Interface','','',0,'',0);
202
 
#CREATE TABLE t2 (
203
 
#  value text,
204
 
#  program varchar(64),
205
 
#  initialowner text NOT NULL,
206
 
#  initialqacontact text NOT NULL,
207
 
#  description text NOT NULL
208
 
#);
209
 
#
210
 
#INSERT INTO t2 VALUES ('TestComponent','TestProduct','id0001','','');
211
 
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - conversion','AAAAA','id0001','','');
212
 
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - generic','AAAAA','id0001','','');
213
 
#INSERT INTO t2 VALUES ('TestComponent2','TestProduct','id0001','','');
214
 
#INSERT INTO t2 VALUES ('BBBBBBBBBBBBB - eeeeeeeee','AAAAA','id0001','','');
215
 
#INSERT INTO t2 VALUES ('kkkkkkkkkkk lllllllllll','AAAAA','id0001','','');
216
 
#INSERT INTO t2 VALUES ('Test Procedures','AAAAA','id0001','','');
217
 
#INSERT INTO t2 VALUES ('Documentation','AAAAA','id0003','','');
218
 
#INSERT INTO t2 VALUES ('DDDDDDDDD','CCC/CCCCCC','id0002','','');
219
 
#INSERT INTO t2 VALUES ('Eeeeeeee Lite','CCC/CCCCCC','id0002','','');
220
 
#INSERT INTO t2 VALUES ('Eeeeeeee Full','CCC/CCCCCC','id0002','','');
221
 
#INSERT INTO t2 VALUES ('Administration','CCC/CCCCCC','id0002','','');
222
 
#INSERT INTO t2 VALUES ('Distribution','CCC/CCCCCC','id0002','','');
223
 
#INSERT INTO t2 VALUES ('Setup','CCC/CCCCCC','id0002','','');
224
 
#INSERT INTO t2 VALUES ('Unspecified','CCC/CCCCCC','id0002','','');
225
 
#INSERT INTO t2 VALUES ('Web Interface','AAAAAAAA-AAA','id0001','','');
226
 
#INSERT INTO t2 VALUES ('Host communication','AAAAA','id0001','','');
227
 
#select value,description,bug_id from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA";
228
 
#select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value;
229
 
#select value,description,COUNT(bug_id) from t2 left join t1 on t2.program=t1.product and t2.value=t1.component where program="AAAAA" group by value having COUNT(bug_id) IN (0,2);
230
 
#
231
 
#drop table t1,t2;
232
 
 
233
 
#
234
 
# Problem with functions and group functions when no matching rows
235
 
#
236
 
 
237
 
create table t1 (foo int);
238
 
insert into t1 values (1);
239
 
select 1+1, "a",count(*) from t1 where foo in (2);
240
 
insert into t1 values (1);
241
 
select 1+1,"a",count(*) from t1 where foo in (2);
242
 
drop table t1;
243
 
 
244
 
#
245
 
# Test GROUP BY DESC
246
 
 
247
 
CREATE TABLE t1 (
248
 
  spID int,
249
 
  userID int,
250
 
  score int,
251
 
  key (spid),
252
 
  key (score)
253
 
);
254
 
 
255
 
INSERT INTO t1 VALUES (1,1,1),(2,2,2),(2,1,1),(3,3,3),(4,3,3),(5,3,3),(6,3,3),(7,3,3);
256
 
explain select userid,count(*) from t1 group by userid desc;
257
 
explain select userid,count(*) from t1 group by userid desc order by null;
258
 
select userid,count(*) from t1 group by userid desc;
259
 
select userid,count(*) from t1 group by userid desc having (count(*)+1) IN (4,3);
260
 
select userid,count(*) from t1 group by userid desc having 3  IN (1,COUNT(*));
261
 
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
262
 
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid;
263
 
explain select spid,count(*) from t1 where spid between 1 and 2 group by spid order by null;
264
 
select spid,count(*) from t1 where spid between 1 and 2 group by spid;
265
 
select spid,count(*) from t1 where spid between 1 and 2 group by spid desc;
266
 
explain extended select sql_big_result spid,sum(userid) from t1 group by spid desc;
267
 
explain select sql_big_result spid,sum(userid) from t1 group by spid desc order by null;
268
 
select sql_big_result spid,sum(userid) from t1 group by spid desc;
269
 
explain select sql_big_result score,count(*) from t1 group by score desc;
270
 
explain select sql_big_result score,count(*) from t1 group by score desc order by null;
271
 
select sql_big_result score,count(*) from t1 group by score desc;
272
 
drop table t1;
273
 
 
274
 
# not purely group_by bug, but group_by is involved...
275
 
 
276
 
create table t1 (a date default null, b date default null);
277
 
insert t1 values ('1999-10-01','2000-01-10'), ('1997-01-01','1998-10-01');
278
 
select a,min(b) c,count(distinct rand()) from t1 group by a having c<a + interval 1 day;
279
 
drop table t1;
280
 
 
281
 
# Compare with hash keys
282
 
 
283
 
CREATE TABLE t1 (a char(1));
284
 
INSERT INTO t1 VALUES ('A'),('B'),('A'),('B'),('A'),('B'),(NULL),('a'),('b'),(NULL),('A'),('B'),(NULL);
285
 
SELECT a FROM t1 GROUP BY a;
286
 
SELECT a,count(*) FROM t1 GROUP BY a;
287
 
SELECT a FROM t1 GROUP BY binary a;
288
 
SELECT a,count(*) FROM t1 GROUP BY binary a;
289
 
SELECT binary a FROM t1 GROUP BY 1;
290
 
SELECT binary a,count(*) FROM t1 GROUP BY 1;
291
 
# Do the same tests with MyISAM temporary tables
292
 
SELECT a FROM t1 GROUP BY a;
293
 
SELECT a,count(*) FROM t1 GROUP BY a;
294
 
SELECT a FROM t1 GROUP BY binary a;
295
 
SELECT a,count(*) FROM t1 GROUP BY binary a;
296
 
SELECT binary a FROM t1 GROUP BY 1;
297
 
SELECT binary a,count(*) FROM t1 GROUP BY 1;
298
 
drop table t1;
299
 
 
300
 
#
301
 
# Test of key >= 256 bytes
302
 
#
303
 
 
304
 
CREATE TABLE t1 (
305
 
  `a` char(193) default NULL,
306
 
  `b` char(63) default NULL
307
 
);
308
 
INSERT INTO t1 VALUES ('abc','def'),('hij','klm');
309
 
SELECT CONCAT(a, b) FROM t1 GROUP BY 1;
310
 
SELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;
311
 
SELECT CONCAT(a, b),count(distinct a) FROM t1 GROUP BY 1;
312
 
SELECT 1 FROM t1 GROUP BY CONCAT(a, b);
313
 
INSERT INTO t1 values ('hij','klm');
314
 
SELECT CONCAT(a, b),count(*) FROM t1 GROUP BY 1;
315
 
DROP TABLE t1;
316
 
 
317
 
#
318
 
# Test problem with ORDER BY on a SUM() column
319
 
#
320
 
 
321
 
create table t1 (One int, Two int, Three int, Four int);
322
 
insert into t1 values (1,2,1,4),(1,2,2,4),(1,2,3,4),(1,2,4,4),(1,1,1,4),(1,1,2,4),(1,1,3,4),(1,1,4,4),(1,3,1,4),(1,3,2,4),(1,3,3,4),(1,3,4,4);
323
 
select One, Two, sum(Four) from t1 group by One,Two;
324
 
drop table t1;
325
 
 
326
 
create table t1 (id integer primary key not null auto_increment, gender char(1));
327
 
insert into t1 values (NULL, 'M'), (NULL, 'F'),(NULL, 'F'),(NULL, 'F'),(NULL, 'M');
328
 
create table t2 (user_id integer not null, date date);
329
 
insert into t2 values (1, '2002-06-09'),(2, '2002-06-09'),(1, '2002-06-09'),(3, '2002-06-09'),(4, '2002-06-09'),(4, '2002-06-09');
330
 
select u.gender as gender, count(distinct  u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender;
331
 
select u.gender as  gender, count(distinct  u.id) as dist_count, (count(distinct u.id)/5*100) as percentage from t1 u, t2 l where l.user_id = u.id group by u.gender  order by percentage;
332
 
drop table t1,t2;
333
 
 
334
 
#
335
 
# The GROUP BY returned rows in wrong order in 3.23.51
336
 
#
337
 
 
338
 
CREATE TABLE t1 (ID1 int, ID2 int, ID int NOT NULL AUTO_INCREMENT,PRIMARY KEY(ID
339
 
));
340
 
insert into t1 values (1,244,NULL),(2,243,NULL),(134,223,NULL),(185,186,NULL);
341
 
select S.ID as xID, S.ID1 as xID1 from t1 as S left join t1 as yS  on S.ID1 between yS.ID1 and yS.ID2;
342
 
select S.ID as xID, S.ID1 as xID1, repeat('*',count(distinct yS.ID)) as Level from t1 as S left join t1 as yS  on S.ID1 between yS.ID1 and yS.ID2 group by xID order by xID1;
343
 
drop table t1;
344
 
 
345
 
#
346
 
# Problem with MAX and LEFT JOIN
347
 
#
348
 
 
349
 
CREATE TABLE t1 (
350
 
  pid int NOT NULL default '0',
351
 
  c1id int default NULL,
352
 
  c2id int default NULL,
353
 
  value int NOT NULL default '0',
354
 
  UNIQUE KEY pid2 (pid,c1id,c2id),
355
 
  UNIQUE KEY pid (pid,value)
356
 
) ENGINE=MyISAM;
357
 
 
358
 
INSERT INTO t1 VALUES (1, 1, NULL, 1),(1, 2, NULL, 2),(1, NULL, 3, 3),(1, 4, NULL, 4),(1, 5, NULL, 5);
359
 
 
360
 
CREATE TABLE t2 (
361
 
  id int NOT NULL default '0',
362
 
  active enum('Yes','No') NOT NULL default 'Yes',
363
 
  PRIMARY KEY  (id)
364
 
) ENGINE=MyISAM;
365
 
 
366
 
INSERT INTO t2 VALUES (1, 'Yes'),(2, 'No'),(4, 'Yes'),(5, 'No');
367
 
 
368
 
CREATE TABLE t3 (
369
 
  id int NOT NULL default '0',
370
 
  active enum('Yes','No') NOT NULL default 'Yes',
371
 
  PRIMARY KEY  (id)
372
 
);
373
 
INSERT INTO t3 VALUES (3, 'Yes');
374
 
 
375
 
select * from t1 AS m LEFT JOIN t2 AS c1 ON m.c1id = 
376
 
c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = c2.id AND 
377
 
c2.active = 'Yes' WHERE m.pid=1  AND (c1.id IS NOT NULL OR c2.id IS NOT NULL);
378
 
select max(value) from t1 AS m LEFT JOIN t2 AS c1 ON 
379
 
m.c1id = c1.id AND c1.active = 'Yes' LEFT JOIN t3 AS c2 ON m.c2id = 
380
 
c2.id AND c2.active = 'Yes' WHERE m.pid=1  AND (c1.id IS NOT NULL OR c2.id IS 
381
 
NOT NULL);
382
 
drop table t1,t2,t3;
383
 
 
384
 
#
385
 
# Test bug in GROUP BY on BLOB that is NULL or empty
386
 
#
387
 
 
388
 
create table t1 (a blob null);
389
 
insert into t1 values (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(""),(""),(""),("b");
390
 
select a,count(*) from t1 group by a;
391
 
select a,count(*) from t1 group by a;
392
 
drop table t1;
393
 
 
394
 
#
395
 
# Test of GROUP BY ... ORDER BY NULL optimization
396
 
#
397
 
 
398
 
create table t1 (a int not null, b int not null);
399
 
insert into t1 values (1,1),(1,2),(3,1),(3,2),(2,2),(2,1);
400
 
create table t2 (a int not null, b int not null, key(a));
401
 
insert into t2 values (1,3),(3,1),(2,2),(1,1);
402
 
select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;
403
 
select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;
404
 
explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b;
405
 
explain select t1.a,t2.b from t1,t2 where t1.a=t2.a group by t1.a,t2.b ORDER BY NULL;
406
 
drop table t1,t2;
407
 
 
408
 
#
409
 
# group function arguments in some functions
410
 
#
411
 
 
412
 
create table t1 (a int, b int);
413
 
insert into t1 values (1, 4),(10, 40),(1, 4),(10, 43),(1, 4),(10, 41),(1, 4),(10, 43),(1, 4);
414
 
select a, MAX(b), INTERVAL (MAX(b), 1,3,10,30,39,40,50,60,100,1000) from t1 group by a;
415
 
select a, MAX(b), CASE MAX(b) when 4 then 4 when 43 then 43 else 0 end from t1 group by a;
416
 
select a, MAX(b), FIELD(MAX(b), '43', '4', '5') from t1 group by a;
417
 
select a, MAX(b), CONCAT_WS(MAX(b), '43', '4', '5') from t1 group by a;
418
 
select a, MAX(b), ELT(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f') from t1 group by a;
419
 
select a, MAX(b), MAKE_SET(MAX(b), 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') from t1 group by a;
420
 
drop table t1;
421
 
 
422
 
#
423
 
# Problem with group by and alias
424
 
#
425
 
 
426
 
create table t1 (id int not null, qty int not null);
427
 
insert into t1 values (1,2),(1,3),(2,4),(2,5);
428
 
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and cqty>1;
429
 
select id, sum(qty) as sqty from t1 group by id having sqty>2 and count(qty)>1;
430
 
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sqty>2 and cqty>1;
431
 
select id, sum(qty) as sqty, count(qty) as cqty from t1 group by id having sum(qty)>2 and count(qty)>1;
432
 
select count(*), case interval(qty,2,3,4,5,6,7,8) when -1 then NULL when 0 then "zero" when 1 then "one" when 2 then "two" end as category from t1 group by category;
433
 
select count(*), interval(qty,2,3,4,5,6,7,8) as category from t1 group by category;
434
 
drop table t1;
435
 
#
436
 
# Tests for bug #1355: 'Using filesort' is missing in EXPLAIN when ORDER BY
437
 
# NULL is used.
438
 
#
439
 
CREATE TABLE t1 (
440
 
  userid int,
441
 
  score int,
442
 
  key (score)
443
 
);
444
 
INSERT INTO t1 VALUES (1,1),(2,2),(1,1),(3,3),(3,3),(3,3),(3,3),(3,3);
445
 
# Here we select unordered GROUP BY into a temporary talbe, 
446
 
# and then sort it with filesort (GROUP BY in MySQL 
447
 
# implies sorted order of results)
448
 
SELECT userid,count(*) FROM t1 GROUP BY userid DESC;
449
 
EXPLAIN SELECT userid,count(*) FROM t1 GROUP BY userid DESC;
450
 
DROP TABLE t1;
451
 
CREATE TABLE t1 (
452
 
  i int default NULL,
453
 
  j int default NULL
454
 
);
455
 
INSERT INTO t1 VALUES (1,2),(2,3),(4,5),(3,5),(1,5),(23,5);
456
 
SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
457
 
explain SELECT i, COUNT(DISTINCT(i)) FROM t1 GROUP BY j ORDER BY NULL;
458
 
DROP TABLE t1;
459
 
 
460
 
#Test for BUG#6976: Aggregate functions have incorrect NULL-ness
461
 
create table t1 (a int);
462
 
insert into t1 values(null);
463
 
select min(a) is null from t1;
464
 
select min(a) is null or null from t1;
465
 
select 1 and min(a) is null from t1;
466
 
drop table t1;
467
 
 
468
 
# Test for BUG#5400: GROUP_CONCAT returns everything twice.
469
 
create table t1 ( col1 int, col2 int );
470
 
insert into t1 values (1,1),(1,2),(1,3),(2,1),(2,2);
471
 
select group_concat( distinct col1 ) as alias from t1
472
 
  group by col2 having alias like '%';
473
 
 
474
 
drop table t1;
475
 
 
476
 
#
477
 
# Test BUG#8216 when referring in HAVING to n alias which is rand() function
478
 
#
479
 
 
480
 
create table t1 (a integer, b integer, c integer);
481
 
insert into t1 (a,b) values (1,2),(1,3),(2,5);
482
 
select a, 0.1*0+1 r2, sum(1) r1 from t1 where a = 1 group  by a having r1>1 and r2=1;
483
 
# rand(100)*10 will be < 2 only for the first row (of 6)
484
 
select a, round(rand(100)*10) r2, sum(1) r1 from t1 where a = 1 group  by a having r1>1 and r2<=2;
485
 
select a,sum(b) from t1 where a=1 group by c;
486
 
select a*sum(b) from t1 where a=1 group by c;
487
 
select sum(a)*sum(b) from t1 where a=1 group by c;
488
 
select a,sum(b) from t1 where a=1 group by c having a=1;
489
 
select a as d,sum(b) from t1 where a=1 group by c having d=1;
490
 
select sum(a)*sum(b) as d from t1 where a=1 group by c having d > 0;
491
 
drop table t1;
492
 
 
493
 
# Test for BUG#9213 GROUP BY query on utf-8 key returns wrong results
494
 
create table t1(a int);
495
 
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(8),(9);
496
 
create table t2 (
497
 
  a int,
498
 
  b varchar(200) NOT NULL,
499
 
  c varchar(50) NOT NULL,
500
 
  d varchar(100) NOT NULL,
501
 
  primary key (a,b(132),c,d),
502
 
  key a (a,b)
503
 
);
504
 
 
505
 
insert into t2 select 
506
 
   x3.a,  -- 3
507
 
   concat('val-', x3.a + 3*x4.a), -- 12
508
 
   concat('val-', @a:=x3.a + 3*x4.a + 12*C.a), -- 120
509
 
   concat('val-', @a + 120*D.a)
510
 
from t1 x3, t1 x4, t1 C, t1 D where x3.a < 3 and x4.a < 4 and D.a < 4;
511
 
 
512
 
delete from t2  where a = 2 and b = 'val-2' order by a,b,c,d limit 30;
513
 
 
514
 
explain select c from t2 where a = 2 and b = 'val-2' group by c;
515
 
select c from t2 where a = 2 and b = 'val-2' group by c;
516
 
drop table t1,t2;
517
 
 
518
 
# Test for BUG#9298 "Wrong handling of int4 columns in GROUP functions"
519
 
# (the actual problem was with protocol code, not GROUP BY)
520
 
create table t1 (b int4 not null);
521
 
insert into t1 values(300000);
522
 
select * from t1;
523
 
select min(b) from t1;
524
 
drop table t1;
525
 
 
526
 
#
527
 
# Test for bug #11088: GROUP BY a BLOB column with COUNT(DISTINCT column1) 
528
 
#
529
 
 
530
 
CREATE TABLE t1 (id int PRIMARY KEY, user_id int, hostname longtext);
531
 
 
532
 
INSERT INTO t1 VALUES
533
 
  (1, 7, 'cache-dtc-af05.proxy.aol.com'),
534
 
  (2, 3, 'what.ever.com'),
535
 
  (3, 7, 'cache-dtc-af05.proxy.aol.com'),
536
 
  (4, 7, 'cache-dtc-af05.proxy.aol.com');
537
 
 
538
 
SELECT hostname, COUNT(DISTINCT user_id) as no FROM t1
539
 
  WHERE hostname LIKE '%aol%'
540
 
    GROUP BY hostname;
541
 
 
542
 
DROP TABLE t1;
543
 
 
544
 
#
545
 
# Test for bug #8614: GROUP BY 'const' with DISTINCT  
546
 
#
547
 
 
548
 
CREATE TABLE t1 (a  int, b int);
549
 
INSERT INTO t1 VALUES (1,2), (1,3);
550
 
SELECT a, b FROM t1 GROUP BY 'const';
551
 
SELECT DISTINCT a, b FROM t1 GROUP BY 'const';
552
 
 
553
 
DROP TABLE t1;
554
 
 
555
 
#
556
 
# Test for bug #11385: GROUP BY for datetime converted to decimals  
557
 
#
558
 
 
559
 
CREATE TABLE t1 (id INT, dt DATETIME);
560
 
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
561
 
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
562
 
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
563
 
INSERT INTO t1 VALUES ( 1, '2005-05-01 12:30:00' );
564
 
SELECT dt DIV 1 AS f, id FROM t1 GROUP BY f;
565
 
 
566
 
DROP TABLE t1;
567
 
 
568
 
#
569
 
# Test for bug #11295: GROUP BY a BLOB column with COUNT(DISTINCT column1) 
570
 
#                      when the BLOB column takes NULL values
571
 
572
 
 
573
 
CREATE TABLE t1 (id varchar(20) NOT NULL);
574
 
INSERT INTO t1 VALUES ('trans1'), ('trans2');
575
 
CREATE TABLE t2 (id varchar(20) NOT NULL, err_comment blob NOT NULL);
576
 
INSERT INTO t2 VALUES ('trans1', 'a problem');
577
 
SELECT COUNT(DISTINCT(t1.id)), LEFT(err_comment, 256) AS comment
578
 
  FROM t1 LEFT JOIN t2 ON t1.id=t2.id GROUP BY comment;
579
 
 
580
 
DROP TABLE t1, t2;
581
 
 
582
 
#
583
 
# Bug #12266 GROUP BY expression on DATE column produces result with
584
 
#            reduced length
585
 
#
586
 
create table t1 (f1 date);
587
 
insert into t1 values('2005-06-06');
588
 
insert into t1 values('2005-06-06'); 
589
 
select date(left(f1+0,8)) from t1 group by 1;
590
 
drop table t1;
591
 
 
592
 
#
593
 
# Test for bug #11414: crash on Windows for a simple GROUP BY query 
594
 
#  
595
 
                    
596
 
CREATE TABLE t1 (n int);
597
 
INSERT INTO t1 VALUES (1);
598
 
SELECT n+1 AS n FROM t1 GROUP BY n;
599
 
DROP TABLE t1;
600
 
 
601
 
#
602
 
# BUG#12695: Item_func_isnull::update_used_tables
603
 
# did not update const_item_cache
604
 
#
605
 
create table t1(f1 varchar(5) key);
606
 
insert into t1 values (1),(2);
607
 
select sql_buffer_result max(f1) is null from t1;
608
 
select sql_buffer_result max(f1)+1 from t1;
609
 
drop table t1;
610
 
 
611
 
#
612
 
# BUG#14019-4.1-opt
613
 
#
614
 
CREATE TABLE t1(a INT); INSERT INTO t1 VALUES (1),(2);
615
 
 
616
 
SELECT a FROM t1 GROUP BY 'a';
617
 
SELECT a FROM t1 GROUP BY "a";
618
 
SELECT a FROM t1 GROUP BY `a`;
619
 
 
620
 
SELECT a FROM t1 GROUP BY "a";
621
 
SELECT a FROM t1 GROUP BY 'a';
622
 
SELECT a FROM t1 GROUP BY `a`;
623
 
 
624
 
SELECT a FROM t1 HAVING 'a' > 1;
625
 
SELECT a FROM t1 HAVING "a" > 1;
626
 
SELECT a FROM t1 HAVING `a` > 1;
627
 
 
628
 
SELECT a FROM t1 ORDER BY 'a' DESC;
629
 
SELECT a FROM t1 ORDER BY "a" DESC;
630
 
SELECT a FROM t1 ORDER BY `a` DESC;
631
 
DROP TABLE t1;
632
 
 
633
 
#
634
 
# Bug #29717 INSERT INTO SELECT inserts values even if SELECT statement itself
635
 
# returns empty
636
 
637
 
CREATE TABLE t1 (
638
 
    f1 int NOT NULL auto_increment primary key,
639
 
    f2 varchar(100) NOT NULL default ''
640
 
);
641
 
CREATE TABLE t2 (
642
 
    f1 varchar(10) NOT NULL default '',
643
 
    f2 char(3) NOT NULL default '',
644
 
    PRIMARY KEY  (`f1`),
645
 
    KEY `k1` (`f2`,`f1`)
646
 
);
647
 
 
648
 
INSERT INTO t1 values(NULL, '');
649
 
INSERT INTO `t2` VALUES ('486878','WDT'),('486910','WDT');
650
 
SELECT SQL_BUFFER_RESULT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1;
651
 
SELECT avg(t2.f1) FROM t1, t2 where t2.f2 = 'SIR' GROUP BY t1.f1;
652
 
DROP TABLE t1, t2;
653
 
 
654
 
 
655
 
# End of 4.1 tests
656
 
 
657
 
#
658
 
# Bug#11211: Ambiguous column reference in GROUP BY.
659
 
#
660
 
 
661
 
create table t1 (c1 char(3), c2 char(3));
662
 
create table t2 (c3 char(3), c4 char(3));
663
 
insert into t1 values ('aaa', 'bb1'), ('aaa', 'bb2');
664
 
insert into t2 values ('aaa', 'bb1'), ('aaa', 'bb2');
665
 
 
666
 
# query with ambiguous column reference 'c2'
667
 
select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4
668
 
group by c2;
669
 
show warnings;
670
 
 
671
 
# this query has no ambiguity
672
 
select t1.c1 as c2 from t1, t2 where t1.c2 = t2.c4
673
 
group by t1.c1;
674
 
 
675
 
show warnings;
676
 
drop table t1, t2;
677
 
 
678
 
#
679
 
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
680
 
#
681
 
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, key (b));
682
 
 
683
 
INSERT INTO t1 VALUES (1,      1);
684
 
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20) FROM t1;
685
 
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20) FROM t1;
686
 
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20) FROM t1;
687
 
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20) FROM t1;
688
 
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20) FROM t1;
689
 
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20) FROM t1;
690
 
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20) FROM t1;
691
 
 
692
 
SELECT MIN(b), MAX(b) from t1;
693
 
 
694
 
EXPLAIN SELECT b, sum(1) FROM t1 GROUP BY b;
695
 
EXPLAIN SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
696
 
SELECT b, sum(1) FROM t1 GROUP BY b;
697
 
SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
698
 
DROP TABLE t1;
699
 
 
700
 
#
701
 
# Bug #23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode
702
 
#
703
 
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
704
 
INSERT INTO t1 VALUES (1,1),(2,1),(3,2),(4,2),(5,3),(6,3);
705
 
 
706
 
SELECT MAX(a)-MIN(a) FROM t1 GROUP BY b;
707
 
SELECT CEILING(MIN(a)) FROM t1 GROUP BY b;
708
 
SELECT CASE WHEN AVG(a)>=0 THEN 'Positive' ELSE 'Negative' END FROM t1 
709
 
 GROUP BY b;
710
 
SELECT a + 1 FROM t1 GROUP BY a;
711
 
SELECT a + b FROM t1 GROUP BY b;
712
 
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1) 
713
 
  FROM t1 AS t1_outer;
714
 
SELECT 1 FROM t1 as t1_outer GROUP BY a 
715
 
  HAVING (SELECT t1_outer.a FROM t1 AS t1_inner GROUP BY b LIMIT 1);
716
 
SELECT (SELECT t1_outer.a FROM t1 AS t1_inner LIMIT 1) 
717
 
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
718
 
--error ER_BAD_FIELD_ERROR 
719
 
SELECT 1 FROM t1 as t1_outer GROUP BY a 
720
 
  HAVING (SELECT t1_outer.b FROM t1 AS t1_inner LIMIT 1);
721
 
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner LIMIT 1) 
722
 
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
723
 
SELECT (SELECT SUM(t1_inner.a) FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1)
724
 
  FROM t1 AS t1_outer;
725
 
SELECT (SELECT SUM(t1_outer.a) FROM t1 AS t1_inner LIMIT 1) 
726
 
  FROM t1 AS t1_outer GROUP BY t1_outer.b;
727
 
 
728
 
SELECT 1 FROM t1 as t1_outer 
729
 
  WHERE (SELECT t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.b LIMIT 1);
730
 
 
731
 
SELECT b FROM t1 GROUP BY b HAVING CEILING(b) > 0;
732
 
 
733
 
SELECT 1 FROM t1 GROUP BY b HAVING b = 2 OR b = 3 OR SUM(a) > 12;
734
 
SELECT 1 FROM t1 GROUP BY b HAVING ROW (b,b) = ROW (1,1);
735
 
 
736
 
--error ER_BAD_FIELD_ERROR
737
 
SELECT 1 FROM t1 GROUP BY b HAVING a = 2;
738
 
--error ER_INVALID_GROUP_FUNC_USE
739
 
SELECT 1 FROM t1 GROUP BY SUM(b);
740
 
SELECT b FROM t1 AS t1_outer GROUP BY a HAVING t1_outer.a IN 
741
 
  (SELECT SUM(t1_inner.b)+t1_outer.b FROM t1 AS t1_inner GROUP BY t1_inner.a
742
 
   HAVING SUM(t1_inner.b)+t1_outer.b > 5);
743
 
DROP TABLE t1;
744
 
#
745
 
# Bug#27874: Non-grouped columns are allowed by * in ONLY_FULL_GROUP_BY mode.
746
 
#
747
 
create table t1(f1 int, f2 int);
748
 
select * from t1 group by f1;
749
 
select * from t1 group by f2;
750
 
select * from t1 group by f1, f2;
751
 
select t1.f1,t.* from t1, t1 t group by 1;
752
 
drop table t1;
753
 
 
754
 
#
755
 
# Bug #32202: ORDER BY not working with GROUP BY
756
 
#
757
 
 
758
 
CREATE TABLE t1(
759
 
  id INT AUTO_INCREMENT PRIMARY KEY, 
760
 
  c1 INT NOT NULL, 
761
 
  c2 INT NOT NULL,
762
 
  UNIQUE KEY (c2,c1));
763
 
 
764
 
INSERT INTO t1(c1,c2) VALUES (5,1), (4,1), (3,5), (2,3), (1,3);
765
 
 
766
 
# Show that the test cases from the bug report pass
767
 
SELECT * FROM t1 ORDER BY c1;
768
 
SELECT * FROM t1 GROUP BY id ORDER BY c1;
769
 
 
770
 
# Show that DESC is handled correctly
771
 
SELECT * FROM t1 GROUP BY id ORDER BY id DESC;
772
 
 
773
 
# Show that results are correctly ordered when ORDER BY fields
774
 
# are a subset of GROUP BY ones
775
 
SELECT * FROM t1 GROUP BY c2 ,c1, id ORDER BY c2, c1;
776
 
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1;
777
 
SELECT * FROM t1 GROUP BY c2, c1, id ORDER BY c2 DESC, c1 DESC;
778
 
 
779
 
# Show that results are correctly ordered when GROUP BY fields
780
 
# are a subset of ORDER BY ones
781
 
SELECT * FROM t1 GROUP BY c2  ORDER BY c2, c1;
782
 
SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1;
783
 
SELECT * FROM t1 GROUP BY c2  ORDER BY c2 DESC, c1 DESC;
784
 
 
785
 
DROP TABLE t1;
786
 
 
787
 
 
788
 
--echo #
789
 
--echo # Bug#27219: Aggregate functions in ORDER BY.  
790
 
--echo #
791
 
CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 0);
792
 
INSERT INTO t1 (a, b) VALUES (3,3), (2,2), (3,3), (2,2), (3,3), (4,4);
793
 
CREATE TABLE t2 SELECT * FROM t1;
794
 
 
795
 
SELECT 1 FROM t1 ORDER BY COUNT(*);
796
 
SELECT 1 FROM t1 ORDER BY COUNT(*) + 1;
797
 
SELECT 1 FROM t1 ORDER BY COUNT(*) + a;
798
 
SELECT 1 FROM t1 ORDER BY COUNT(*), 1;
799
 
SELECT 1 FROM t1 ORDER BY COUNT(*), a;
800
 
 
801
 
SELECT 1 FROM t1 ORDER BY SUM(a);
802
 
SELECT 1 FROM t1 ORDER BY SUM(a + 1);
803
 
SELECT 1 FROM t1 ORDER BY SUM(a) + 1;
804
 
SELECT 1 FROM t1 ORDER BY SUM(a), b;
805
 
 
806
 
SELECT a FROM t1 ORDER BY COUNT(b);
807
 
 
808
 
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2);
809
 
 
810
 
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2 ORDER BY t2.a);
811
 
SELECT t1.a FROM t1 ORDER BY (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
812
 
 
813
 
SELECT t1.a FROM t1
814
 
  WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
815
 
SELECT t1.a FROM t1 GROUP BY t1.a
816
 
  HAVING t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
817
 
 
818
 
SELECT t1.a FROM t1 GROUP BY t1.a
819
 
  HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
820
 
SELECT t1.a FROM t1 GROUP BY t1.a
821
 
  HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
822
 
SELECT t1.a FROM t1 GROUP BY t1.a
823
 
  HAVING t1.a > ANY (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
824
 
 
825
 
SELECT t1.a FROM t1
826
 
  WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
827
 
 
828
 
SELECT 1 FROM t1 GROUP BY t1.a
829
 
  HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
830
 
SELECT 1 FROM t1 GROUP BY t1.a
831
 
  HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
832
 
SELECT 1 FROM t1 GROUP BY t1.a
833
 
  HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
834
 
 
835
 
SELECT 1 FROM t1 GROUP BY t1.a
836
 
  HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY t2.a LIMIT 1);
837
 
SELECT 1 FROM t1 GROUP BY t1.a
838
 
  HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
839
 
SELECT 1 FROM t1 GROUP BY t1.a
840
 
  HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
841
 
 
842
 
# Both SUMs are aggregated in the subquery, no mixture:
843
 
SELECT t1.a FROM t1 
844
 
  WHERE t1.a = (SELECT t2.a FROM t2 GROUP BY t2.a
845
 
                  ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1);
846
 
 
847
 
# SUM(t1.b) is aggregated in the subquery, no mixture:
848
 
SELECT t1.a, SUM(t1.b) FROM t1 
849
 
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2 GROUP BY t2.a
850
 
                  ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1)
851
 
  GROUP BY t1.a;
852
 
 
853
 
# 2nd SUM(t1.b) is aggregated in the subquery, no mixture:
854
 
SELECT t1.a, SUM(t1.b) FROM t1 
855
 
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2
856
 
                  ORDER BY SUM(t2.b) + SUM(t1.b) LIMIT 1)
857
 
  GROUP BY t1.a;
858
 
 
859
 
# SUM(t2.b + t1.a) is aggregated in the subquery, no mixture:
860
 
SELECT t1.a, SUM(t1.b) FROM t1 
861
 
  WHERE t1.a = (SELECT SUM(t2.b) FROM t2
862
 
                  ORDER BY SUM(t2.b + t1.a) LIMIT 1)
863
 
  GROUP BY t1.a;
864
 
 
865
 
SELECT t1.a FROM t1 GROUP BY t1.a
866
 
    HAVING (1, 1) = (SELECT SUM(t1.a), t1.a FROM t2 LIMIT 1);
867
 
 
868
 
select avg (
869
 
  (select
870
 
    (select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
871
 
   from t1 as outr order by outr.a limit 1))
872
 
from t1 as most_outer;
873
 
 
874
 
select avg (
875
 
  (select (
876
 
    (select sum(outr.a + innr.a) from t1 as innr limit 1)) as tt
877
 
   from t1 as outr order by count(outr.a) limit 1)) as tt
878
 
from t1 as most_outer;
879
 
 
880
 
select (select sum(outr.a + t1.a) from t1 limit 1) as tt from t1 as outr order by outr.a;
881
 
 
882
 
DROP TABLE t1, t2;
883
 
 
884
 
--echo End of 5.0 tests
885
 
# Bug #21174: Index degrades sort performance and 
886
 
#             optimizer does not honor IGNORE INDEX.
887
 
#             a.k.a WL3527.
888
 
#
889
 
CREATE TABLE t1 (a INT, b INT,
890
 
                 PRIMARY KEY (a),
891
 
                 KEY i2(a,b));
892
 
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8);
893
 
INSERT INTO t1 SELECT a + 8,b FROM t1;
894
 
INSERT INTO t1 SELECT a + 16,b FROM t1;
895
 
INSERT INTO t1 SELECT a + 32,b FROM t1;
896
 
INSERT INTO t1 SELECT a + 64,b FROM t1;
897
 
INSERT INTO t1 SELECT a + 128,b FROM t1 limit 16;
898
 
ANALYZE TABLE t1;
899
 
EXPLAIN SELECT a FROM t1 WHERE a < 2;
900
 
EXPLAIN SELECT a FROM t1 WHERE a < 2 ORDER BY a;
901
 
EXPLAIN SELECT a FROM t1 WHERE a < 2 GROUP BY a;
902
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY,i2);
903
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR JOIN (PRIMARY,i2);
904
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR GROUP BY (PRIMARY,i2) GROUP BY a;
905
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
906
 
SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY,i2) ORDER BY a;
907
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX FOR ORDER BY (PRIMARY)
908
 
  IGNORE INDEX FOR GROUP BY (i2) GROUP BY a;
909
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX (PRIMARY) IGNORE INDEX FOR ORDER BY (i2);
910
 
EXPLAIN SELECT a FROM t1 FORCE INDEX (i2);
911
 
EXPLAIN SELECT a FROM t1 USE INDEX ();
912
 
EXPLAIN SELECT a FROM t1 USE INDEX () USE INDEX (i2);
913
 
--error ER_WRONG_USAGE
914
 
EXPLAIN SELECT a FROM t1 
915
 
  FORCE INDEX (PRIMARY) 
916
 
  IGNORE INDEX FOR GROUP BY (i2)
917
 
  IGNORE INDEX FOR ORDER BY (i2)
918
 
  USE INDEX (i2);
919
 
EXPLAIN SELECT a FROM t1 USE INDEX (i2) USE INDEX ();
920
 
--error ER_PARSE_ERROR
921
 
EXPLAIN SELECT a FROM t1 FORCE INDEX ();
922
 
--error ER_PARSE_ERROR
923
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX ();
924
 
# disable the columns irrelevant to this test here. On some systems 
925
 
# without support for large files the rowid is shorter and its size affects 
926
 
# the cost calculations. This causes the optimizer to choose loose index
927
 
# scan over normal index access.
928
 
--replace_column 4 # 7 # 9 # 10 #
929
 
EXPLAIN SELECT a FROM t1 USE INDEX FOR JOIN (i2) 
930
 
  USE INDEX FOR GROUP BY (i2) GROUP BY a;
931
 
EXPLAIN SELECT a FROM t1 FORCE INDEX FOR JOIN (i2) 
932
 
  FORCE INDEX FOR GROUP BY (i2) GROUP BY a;
933
 
EXPLAIN SELECT a FROM t1 USE INDEX () IGNORE INDEX (i2);
934
 
EXPLAIN SELECT a FROM t1 IGNORE INDEX (i2) USE INDEX ();
935
 
 
936
 
EXPLAIN SELECT a FROM t1 
937
 
  USE INDEX FOR GROUP BY (i2) 
938
 
  USE INDEX FOR ORDER BY (i2)
939
 
  USE INDEX FOR JOIN (i2);
940
 
 
941
 
EXPLAIN SELECT a FROM t1 
942
 
  USE INDEX FOR JOIN (i2) 
943
 
  USE INDEX FOR JOIN (i2) 
944
 
  USE INDEX FOR JOIN (i2,i2);
945
 
 
946
 
EXPLAIN SELECT 1 FROM t1 WHERE a IN
947
 
  (SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
948
 
 
949
 
CREATE TABLE t2 (a INT, b INT, KEY(a));
950
 
INSERT INTO t2 VALUES (1, 1), (2, 2), (3,3), (4,4);
951
 
EXPLAIN SELECT a, SUM(b) FROM t2 GROUP BY a LIMIT 2; 
952
 
EXPLAIN SELECT a, SUM(b) FROM t2 IGNORE INDEX (a) GROUP BY a LIMIT 2;
953
 
 
954
 
EXPLAIN SELECT 1 FROM t2 WHERE a IN
955
 
  (SELECT a FROM t1 USE INDEX (i2) IGNORE INDEX (i2));
956
 
 
957
 
SHOW VARIABLES LIKE 'old';  
958
 
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
959
 
SET @@old = off;  
960
 
 
961
 
DROP TABLE t1, t2;
962
 
 
963
 
#
964
 
# Bug#30596: GROUP BY optimization gives wrong result order
965
 
#
966
 
CREATE TABLE t1(
967
 
  a INT, 
968
 
  b INT NOT NULL, 
969
 
  c INT NOT NULL, 
970
 
  d INT, 
971
 
  UNIQUE KEY (c,b)
972
 
);
973
 
 
974
 
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
975
 
 
976
 
CREATE TABLE t2(
977
 
  a INT,
978
 
  b INT,
979
 
  UNIQUE KEY(a,b)
980
 
);
981
 
 
982
 
INSERT INTO t2 VALUES (NULL, NULL), (NULL, NULL), (NULL, 1), (1, NULL), (1, 1), (1,2);
983
 
 
984
 
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
985
 
SELECT c,b,d FROM t1 GROUP BY c,b,d;
986
 
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
987
 
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
988
 
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
989
 
SELECT c,b,d FROM t1 ORDER BY c,b,d;
990
 
 
991
 
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
992
 
SELECT c,b,d FROM t1 GROUP BY c,b;
993
 
EXPLAIN SELECT c,b   FROM t1 GROUP BY c,b;
994
 
SELECT c,b   FROM t1 GROUP BY c,b;
995
 
 
996
 
EXPLAIN SELECT a,b from t2 ORDER BY a,b;
997
 
SELECT a,b from t2 ORDER BY a,b;
998
 
EXPLAIN SELECT a,b from t2 GROUP BY a,b;
999
 
SELECT a,b from t2 GROUP BY a,b;
1000
 
EXPLAIN SELECT a from t2 GROUP BY a;
1001
 
SELECT a from t2 GROUP BY a;
1002
 
EXPLAIN SELECT b from t2 GROUP BY b;
1003
 
SELECT b from t2 GROUP BY b;
1004
 
 
1005
 
DROP TABLE t1;
1006
 
 
1007
 
#
1008
 
# Bug #31797: error while parsing subqueries -- WHERE is parsed as HAVING
1009
 
#
1010
 
CREATE TABLE t1 ( a INT, b INT );
1011
 
 
1012
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1013
 
FROM t1;
1014
 
 
1015
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1016
 
FROM t1 
1017
 
HAVING b = 10;
1018
 
 
1019
 
--error ER_ILLEGAL_REFERENCE
1020
 
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
1021
 
FROM t1 
1022
 
HAVING b = 10;
1023
 
 
1024
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1025
 
FROM t1;
1026
 
 
1027
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1028
 
FROM t1 
1029
 
HAVING b = 10;
1030
 
 
1031
 
--error ER_ILLEGAL_REFERENCE
1032
 
SELECT MAX(b) c, (SELECT a FROM t1 WHERE b = c)
1033
 
FROM t1 
1034
 
HAVING b = 10;
1035
 
 
1036
 
INSERT INTO t1 VALUES (1, 1);
1037
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1038
 
FROM t1;
1039
 
 
1040
 
INSERT INTO t1 VALUES (2, 1);
1041
 
--error ER_SUBQUERY_NO_1_ROW
1042
 
SELECT b c, (SELECT a FROM t1 WHERE b = c)
1043
 
FROM t1;
1044
 
 
1045
 
DROP TABLE t1;
1046
 
 
1047
 
 
1048