~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
drop table if exists t1,t2,t3;
2
create table t1 (a int);
3
select count(a) as b from t1 where a=0 having b > 0;
4
b
5
insert into t1 values (null);
6
select count(a) as b from t1 where a=0 having b > 0;
7
b
8
select count(a) as b from t1 where a=0 having b >=0;
9
b
10
0
11
explain extended select count(a) as b from t1 where a=0 having b >=0;
12
id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
520.1.18 by Brian Aker
A bunch more test fixes.
13
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	1	100.00	Using where
1 by brian
clean slate
14
Warnings:
520.1.18 by Brian Aker
A bunch more test fixes.
15
Note	1003	select count(`test`.`t1`.`a`) AS `b` from `test`.`t1` where (`test`.`t1`.`a` = 0) having (`b` >= 0)
1 by brian
clean slate
16
drop table t1;
17
CREATE TABLE t1 (
520.1.18 by Brian Aker
A bunch more test fixes.
18
raw_id int NOT NULL default '0',
19
chr_start int NOT NULL default '0',
20
chr_end int NOT NULL default '0',
21
raw_start int NOT NULL default '0',
22
raw_end int NOT NULL default '0',
23
raw_ori int NOT NULL default '0'
1 by brian
clean slate
24
);
25
INSERT INTO t1 VALUES (469713,1,164123,1,164123,1),(317330,164124,317193,101,153170,1),(469434,317194,375620,101,58527,1),(591816,375621,484273,1,108653,1),(591807,484274,534671,91,50488,1),(318885,534672,649362,101,114791,1),(318728,649363,775520,102,126259,1),(336829,775521,813997,101,38577,1),(317740,813998,953227,101,139330,1),(1,813998,953227,101,139330,1);
26
CREATE TABLE t2 (
520.1.18 by Brian Aker
A bunch more test fixes.
27
id int NOT NULL default '0',
28
contig_id int NOT NULL default '0',
29
seq_start int NOT NULL default '0',
30
seq_end int NOT NULL default '0',
31
strand int NOT NULL default '0',
1 by brian
clean slate
32
KEY id (id)
33
);
34
INSERT INTO t2 VALUES (133195,469713,61327,61384,1),(133196,469713,64113,64387,1),(133197,1,1,1,0),(133197,1,1,1,-2);
35
SELECT e.id,
36
MIN( IF(sgp.raw_ori=1,
37
(e.seq_start+sgp.chr_start-sgp.raw_start),  
38
(sgp.chr_start+sgp.raw_end-e.seq_end))) as start, 
39
MAX( IF(sgp.raw_ori=1,
40
(e.seq_end+sgp.chr_start-sgp.raw_start),  
41
(sgp.chr_start+sgp.raw_end-e.seq_start))) as end, 
42
AVG(IF (sgp.raw_ori=1,e.strand,(-e.strand))) as chr_strand 
43
FROM  t1 sgp,
44
t2 e  
45
WHERE sgp.raw_id=e.contig_id 
46
GROUP BY e.id 
47
HAVING chr_strand= -1 and end >= 0 
48
AND start <= 999660;
49
id	start	end	chr_strand
50
133197	813898	813898	-1.0000
51
drop table t1,t2;
520.1.18 by Brian Aker
A bunch more test fixes.
52
CREATE TABLE t1 (Fld1 int default NULL,Fld2 int default NULL);
1 by brian
clean slate
53
INSERT INTO t1 VALUES (1,10),(1,20),(2,NULL),(2,NULL),(3,50);
54
select Fld1, max(Fld2) as q from t1 group by Fld1 having q is not null;
55
Fld1	q
56
1	20
57
3	50
58
select Fld1, max(Fld2) from t1 group by Fld1 having max(Fld2) is not null;
59
Fld1	max(Fld2)
60
1	20
61
3	50
62
select Fld1, max(Fld2) from t1 group by Fld1 having avg(Fld2) is not null;
63
Fld1	max(Fld2)
64
1	20
65
3	50
66
select Fld1, max(Fld2) from t1 group by Fld1 having std(Fld2) is not null;
67
Fld1	max(Fld2)
68
1	20
69
3	50
70
select Fld1, max(Fld2) from t1 group by Fld1 having variance(Fld2) is not null;
71
Fld1	max(Fld2)
72
1	20
73
3	50
74
drop table t1;
75
create table t1 (id int not null, qty int not null);
76
insert into t1 values (1,2),(1,3),(2,4),(2,5);
77
select id, sum(qty) as sqty from t1 group by id having sqty>2;
78
id	sqty
79
1	5
80
2	9
81
select sum(qty) as sqty from t1 group by id having count(id) > 0;
82
sqty
83
5
84
9
85
select sum(qty) as sqty from t1 group by id having count(distinct id) > 0;
86
sqty
87
5
88
9
89
drop table t1;
90
CREATE TABLE t1 (
520.1.18 by Brian Aker
A bunch more test fixes.
91
`id` bigint NOT NULL default '0',
1 by brian
clean slate
92
`description` text
93
) ENGINE=MyISAM;
94
CREATE TABLE t2 (
520.1.18 by Brian Aker
A bunch more test fixes.
95
`id` bigint NOT NULL default '0',
1 by brian
clean slate
96
`description` varchar(20)
97
) ENGINE=MyISAM;
98
INSERT INTO t1  VALUES (1, 'test');
99
INSERT INTO t2 VALUES (1, 'test');
100
CREATE TABLE t3 (
520.1.18 by Brian Aker
A bunch more test fixes.
101
`id`       bigint NOT NULL default '0',
102
`order_id` bigint NOT NULL default '0'
1 by brian
clean slate
103
) ENGINE=MyISAM;
104
select
105
a.id, a.description,
106
count(b.id) as c 
107
from t1 a left join t3 b on a.id=b.order_id 
108
group by a.id, a.description 
109
having (a.description is not null) and (c=0);
110
id	description	c
111
1	test	0
112
select
113
a.*, 
114
count(b.id) as c 
115
from t2 a left join t3 b on a.id=b.order_id 
116
group by a.id, a.description
117
having (a.description is not null) and (c=0);
118
id	description	c
119
1	test	0
120
INSERT INTO t1  VALUES (2, 'test2');
121
select
122
a.id, a.description,
123
count(b.id) as c 
124
from t1 a left join t3 b on a.id=b.order_id 
125
group by a.id, a.description 
126
having (a.description is not null) and (c=0);
127
id	description	c
128
1	test	0
129
2	test2	0
130
drop table t1,t2,t3;
131
CREATE TABLE t1 (a int);
132
INSERT INTO t1 VALUES (3), (4), (1), (3), (1);
133
SELECT SUM(a) FROM t1 GROUP BY a HAVING SUM(a)>0;
134
SUM(a)
135
2
136
6
137
4
138
SELECT SUM(a) FROM t1 GROUP BY a HAVING SUM(a);
139
SUM(a)
140
2
141
6
142
4
143
DROP TABLE t1;
144
CREATE TABLE t1 (a int);
145
INSERT INTO t1 VALUES (1), (2), (1), (3), (2), (1);
146
SELECT a FROM t1 GROUP BY a HAVING a > 1;
147
a
148
2
149
3
150
SELECT a FROM t1 GROUP BY a HAVING 1 != 1 AND a > 1;
151
a
152
SELECT 0 AS x, a FROM t1 GROUP BY x,a HAVING x=1 AND a > 1;
153
x	a
154
EXPLAIN SELECT a FROM t1 GROUP BY a HAVING 1 != 1 AND a > 1;
155
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
156
1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible HAVING
157
EXPLAIN SELECT 0 AS x, a FROM t1 GROUP BY x,a HAVING x=1 AND a > 1;
158
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
159
1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible HAVING
160
DROP table t1;
161
CREATE TABLE t1 (a int PRIMARY KEY);
162
CREATE TABLE t2 (b int PRIMARY KEY, a int);
163
CREATE TABLE t3 (b int, flag int);
164
INSERT INTO t1 VALUES (1);
165
INSERT INTO t2 VALUES (1,1), (2,1), (3,1);
166
INSERT INTO t3(b,flag) VALUES (2, 1);
167
SELECT t1.a
168
FROM t1 INNER JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b
169
GROUP BY t1.a, t2.b HAVING MAX(t3.flag)=0;
170
a
171
SELECT DISTINCT t1.a, MAX(t3.flag)
172
FROM t1 INNER JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b
173
GROUP BY t1.a, t2.b HAVING MAX(t3.flag)=0;
174
a	MAX(t3.flag)
175
SELECT DISTINCT t1.a
176
FROM t1 INNER JOIN t2 ON t1.a=t2.a LEFT JOIN t3 ON t2.b=t3.b
177
GROUP BY t1.a, t2.b HAVING MAX(t3.flag)=0;
178
a
179
DROP TABLE t1,t2,t3;
180
create table t1 (col1 int, col2 varchar(5), col_t1 int);
181
create table t2 (col1 int, col2 varchar(5), col_t2 int);
182
create table t3 (col1 int, col2 varchar(5), col_t3 int);
183
insert into t1 values(10,'hello',10);
184
insert into t1 values(20,'hello',20);
185
insert into t1 values(30,'hello',30);
186
insert into t1 values(10,'bye',10);
187
insert into t1 values(10,'sam',10);
188
insert into t1 values(10,'bob',10);
189
insert into t2 select * from t1;
190
insert into t3 select * from t1;
191
select count(*) from t1 group by col1 having col1 = 10;
192
count(*)
193
4
194
select count(*) as count_col1 from t1 group by col1 having col1 = 10;
195
count_col1
196
4
197
select count(*) as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
198
count_col1
199
4
200
select count(*) from t1 group by col2 having col2 = 'hello';
201
count(*)
202
3
203
select count(*) from t1 group by col2 having col1 = 10;
204
ERROR 42S22: Unknown column 'col1' in 'having clause'
205
select col1 as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
206
count_col1
207
10
208
select col1 as count_col1 from t1 as tmp1 group by col1 having count_col1 = 10;
209
count_col1
210
10
211
select col1 as count_col1 from t1 as tmp1 group by count_col1 having col1 = 10;
212
count_col1
213
10
214
select col1 as count_col1 from t1 as tmp1 group by count_col1 having count_col1 = 10;
215
count_col1
216
10
217
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col1 = 10;
218
count_col1	col2
219
10	bob
220
10	bye
221
10	hello
222
10	sam
223
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having count_col1 = 10;
224
count_col1	col2
225
10	bob
226
10	bye
227
10	hello
228
10	sam
229
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col2 = 'hello';
230
count_col1	col2
231
10	hello
232
20	hello
233
30	hello
234
select col1 as count_col1,col2 as group_col2 from t1 as tmp1 group by col1,col2 having group_col2 = 'hello';
235
count_col1	group_col2
236
10	hello
237
20	hello
238
30	hello
239
select sum(col1) as co12 from t1 group by col2 having col2 10;
629.2.6 by Monty
Updated test output with new and improved error messages.
240
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use near '10' at line 1
1 by brian
clean slate
241
select sum(col1) as co2, count(col2) as cc from t1 group by col1 having col1 =10;
242
co2	cc
243
40	4
244
select t2.col2 from t2 group by t2.col1, t2.col2 having t1.col1 <= 10;
245
ERROR 42S22: Unknown column 't1.col1' in 'having clause'
246
select t1.col1 from t1
247
where t1.col2 in 
248
(select t2.col2 from t2 
249
group by t2.col1, t2.col2 having t2.col1 <= 10);
250
col1
251
10
252
20
253
30
254
10
255
10
256
10
257
select t1.col1 from t1
258
where t1.col2 in 
259
(select t2.col2 from t2
260
group by t2.col1, t2.col2
261
having t2.col1 <=
262
(select min(t3.col1) from t3));
263
col1
264
10
265
20
266
30
267
10
268
10
269
10
270
select t1.col1 from t1
271
where t1.col2 in
272
(select t2.col2 from t2 
273
group by t2.col1, t2.col2 having t1.col1 <= 10);
274
col1
275
10
276
10
277
10
278
10
279
select t1.col1 as tmp_col from t1
280
where t1.col2 in 
281
(select t2.col2 from t2 
282
group by t2.col1, t2.col2 having tmp_col <= 10);
283
tmp_col
284
10
285
10
286
10
287
10
288
select t1.col1 from t1
289
where t1.col2 in 
290
(select t2.col2 from t2 
291
group by t2.col1, t2.col2 having col_t1 <= 10);
292
col1
293
10
294
10
295
10
296
10
297
select sum(col1) from t1
298
group by col_t1
299
having (select col_t1 from t2 where col_t1 = col_t2 order by col_t2 limit 1);
300
sum(col1)
301
40
302
20
303
30
304
select t1.col1 from t1
305
where t1.col2 in 
306
(select t2.col2 from t2 
307
group by t2.col1, t2.col2 having col_t1 <= 10)
308
having col_t1 <= 20;
309
ERROR 42S22: Unknown column 'col_t1' in 'having clause'
310
select t1.col1 from t1
311
where t1.col2 in 
312
(select t2.col2 from t2 
313
group by t2.col1, t2.col2 having col_t1 <= 10)
314
group by col_t1
315
having col_t1 <= 20;
316
col1
317
10
318
select col_t1, sum(col1) from t1
319
group by col_t1
320
having col_t1 > 10 and
321
exists (select sum(t2.col1) from t2
322
group by t2.col2 having t2.col2 > 'b');
323
col_t1	sum(col1)
324
20	20
325
30	30
326
select sum(col1) from t1
327
group by col_t1
328
having col_t1 in (select sum(t2.col1) from t2
329
group by t2.col2, t2.col1 having t2.col1 = t1.col1);
330
ERROR 42S22: Unknown column 't1.col1' in 'having clause'
331
select sum(col1) from t1
332
group by col_t1
333
having col_t1 in (select sum(t2.col1) from t2
334
group by t2.col2, t2.col1 having t2.col1 = col_t1);
335
sum(col1)
336
40
337
20
338
30
339
select t1.col1, t2.col1 from t1, t2 where t1.col1 = t2.col1
340
group by t1.col1, t2.col1 having col1 = 2;
341
ERROR 23000: Column 'col1' in having clause is ambiguous
342
select t1.col1*10+t2.col1 from t1,t2 where t1.col1=t2.col1
343
group by t1.col1, t2.col1 having col1 = 2;
344
ERROR 23000: Column 'col1' in having clause is ambiguous
345
drop table t1, t2, t3;
346
create table t1 (s1 int);
347
insert into t1 values (1),(2),(3);
348
select count(*) from t1 group by s1 having s1 is null;
349
count(*)
350
select s1*0 as s1 from t1 group by s1 having s1 <> 0;
351
s1
352
0
353
0
354
0
355
Warnings:
356
Warning	1052	Column 's1' in group statement is ambiguous
357
Warning	1052	Column 's1' in having clause is ambiguous
358
select s1*0 from t1 group by s1 having s1 = 0;
359
s1*0
360
select s1 from t1 group by 1 having 1 = 0;
361
s1
362
select count(s1) from t1 group by s1 having count(1+1)=2;
363
count(s1)
364
select count(s1) from t1 group by s1 having s1*0=0;
365
count(s1)
366
1
367
1
368
1
369
select * from t1 a, t1 b group by a.s1 having s1 is null;
370
ERROR 23000: Column 's1' in having clause is ambiguous
371
drop table t1;
520.1.18 by Brian Aker
A bunch more test fixes.
372
create table t1 (s1 char);
1 by brian
clean slate
373
insert into t1 values ('b'),('y');
520.1.18 by Brian Aker
A bunch more test fixes.
374
select s1,count(s1) from t1 group by s1 having s1 = 'y';
1 by brian
clean slate
375
s1	count(s1)
376
y	1
377
drop table t1;
378
DROP SCHEMA IF EXISTS HU;
379
CREATE SCHEMA HU ;
380
USE HU ;
381
CREATE TABLE STAFF
382
(EMPNUM   CHAR(3) NOT NULL UNIQUE,
383
EMPNAME  CHAR(20),
384
GRADE    DECIMAL(4),
385
CITY     CHAR(15));
386
CREATE TABLE PROJ
387
(PNUM     CHAR(3) NOT NULL UNIQUE,
388
PNAME    CHAR(20),
389
PTYPE    CHAR(6),
390
BUDGET   DECIMAL(9),
391
CITY     CHAR(15));
392
INSERT INTO STAFF VALUES ('E1','Alice',12,'Deale');
393
INSERT INTO STAFF VALUES ('E2','Betty',10,'Vienna');
394
INSERT INTO STAFF VALUES ('E3','Carmen',13,'Vienna');
395
INSERT INTO STAFF VALUES ('E4','Don',12,'Deale');
396
INSERT INTO STAFF VALUES ('E5','Ed',13,'Akron');
397
INSERT INTO PROJ VALUES  ('P1','MXSS','Design',10000,'Deale');
398
INSERT INTO PROJ VALUES  ('P2','CALM','Code',30000,'Vienna');
399
INSERT INTO PROJ VALUES  ('P3','SDP','Test',30000,'Tampa');
400
INSERT INTO PROJ VALUES  ('P4','SDP','Design',20000,'Deale');
401
INSERT INTO PROJ VALUES  ('P5','IRM','Test',10000,'Vienna');
402
INSERT INTO PROJ VALUES  ('P6','PAYR','Design',50000,'Deale');
403
SELECT EMPNUM, GRADE*1000
404
FROM HU.STAFF WHERE GRADE * 1000 > 
405
ANY (SELECT SUM(BUDGET) FROM HU.PROJ
406
GROUP BY CITY, PTYPE
407
HAVING HU.PROJ.CITY = HU.STAFF.CITY);
408
EMPNUM	GRADE*1000
409
E3	13000
410
DROP SCHEMA HU;
411
USE test;
412
create table t1(f1 int);
413
select f1 from t1 having max(f1)=f1;
414
f1
415
select f1 from t1 group by f1 having max(f1)=f1;
416
f1
417
select f1 from t1 having max(f1)=f1;
418
f1
419
select f1 from t1 group by f1 having max(f1)=f1;
420
f1
421
drop table t1;