mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge rurik.mysql.com:/home/igor/mysql-5.0
into rurik.mysql.com:/home/igor/dev/mysql-5.0-2 sql/item.h: Auto merged sql/sql_class.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged
This commit is contained in:
@ -163,7 +163,7 @@ show warnings;
|
||||
Level Code Message
|
||||
Warning 1260 1 line(s) were cut by GROUP_CONCAT()
|
||||
set group_concat_max_len = 1024;
|
||||
select group_concat(sum(a)) from t1 group by grp;
|
||||
select group_concat(sum(c)) from t1 group by grp;
|
||||
ERROR HY000: Invalid use of group function
|
||||
select grp,group_concat(c order by 2) from t1 group by grp;
|
||||
ERROR 42S22: Unknown column '2' in 'order clause'
|
||||
|
@ -2988,3 +2988,146 @@ max(fld)
|
||||
1
|
||||
drop table t1;
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
CREATE TABLE t2 (c int, d int);
|
||||
CREATE TABLE t3 (e int);
|
||||
INSERT INTO t1 VALUES
|
||||
(1,10), (2,10), (1,20), (2,20), (3,20), (2,30), (4,40);
|
||||
INSERT INTO t2 VALUES
|
||||
(2,10), (2,20), (4,10), (5,10), (3,20), (2,40);
|
||||
INSERT INTO t3 VALUES (10), (30), (10), (20) ;
|
||||
SELECT a, MAX(b), MIN(b) FROM t1 GROUP BY a;
|
||||
a MAX(b) MIN(b)
|
||||
1 20 10
|
||||
2 30 10
|
||||
3 20 20
|
||||
4 40 40
|
||||
SELECT * FROM t2;
|
||||
c d
|
||||
2 10
|
||||
2 20
|
||||
4 10
|
||||
5 10
|
||||
3 20
|
||||
2 40
|
||||
SELECT * FROM t3;
|
||||
e
|
||||
10
|
||||
30
|
||||
10
|
||||
20
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)>20);
|
||||
a
|
||||
2
|
||||
4
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)<d);
|
||||
a
|
||||
2
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)>d);
|
||||
a
|
||||
2
|
||||
4
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE d >= SOME(SELECT e FROM t3 WHERE MAX(b)=e));
|
||||
a
|
||||
2
|
||||
3
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e <= d));
|
||||
a
|
||||
2
|
||||
3
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE d > SOME(SELECT e FROM t3 WHERE MAX(b)=e));
|
||||
a
|
||||
2
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e < d));
|
||||
a
|
||||
2
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE MIN(b) < d AND
|
||||
EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e <= d));
|
||||
a
|
||||
2
|
||||
SELECT a, SUM(a) FROM t1 GROUP BY a;
|
||||
a SUM(a)
|
||||
1 2
|
||||
2 6
|
||||
3 3
|
||||
4 4
|
||||
SELECT a FROM t1
|
||||
WHERE EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) = c) GROUP BY a;
|
||||
a
|
||||
3
|
||||
4
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) = c);
|
||||
a
|
||||
1
|
||||
3
|
||||
4
|
||||
SELECT a FROM t1
|
||||
WHERE a < 3 AND
|
||||
EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) != c) GROUP BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
SELECT a FROM t1
|
||||
WHERE a < 3 AND
|
||||
EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) != c);
|
||||
a
|
||||
1
|
||||
2
|
||||
1
|
||||
2
|
||||
2
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a < ALL(SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING EXISTS(SELECT t3.e FROM t3 GROUP BY t3.e
|
||||
HAVING SUM(t1.a+t2.c) < t3.e/4));
|
||||
a
|
||||
1
|
||||
2
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ALL(SELECT t2.c FROM t2
|
||||
WHERE EXISTS(SELECT t3.e FROM t3 GROUP BY t3.e
|
||||
HAVING SUM(t1.a+t2.c) < t3.e/4));
|
||||
a
|
||||
4
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ALL(SELECT t2.c FROM t2
|
||||
WHERE EXISTS(SELECT t3.e FROM t3
|
||||
WHERE SUM(t1.a+t2.c) < t3.e/4));
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT t1.a from t1 GROUP BY t1.a HAVING AVG(SUM(t1.b)) > 20;
|
||||
ERROR HY000: Invalid use of group function
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING AVG(t2.c+SUM(t1.b)) > 20);
|
||||
a
|
||||
2
|
||||
3
|
||||
4
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING AVG(SUM(t1.b)) > 20);
|
||||
a
|
||||
2
|
||||
4
|
||||
SELECT t1.a, SUM(b) AS sum FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING t2.c+sum > 20);
|
||||
a sum
|
||||
2 60
|
||||
3 20
|
||||
4 40
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -69,7 +69,7 @@ set group_concat_max_len = 1024;
|
||||
# Test errors
|
||||
|
||||
--error 1111
|
||||
select group_concat(sum(a)) from t1 group by grp;
|
||||
select group_concat(sum(c)) from t1 group by grp;
|
||||
--error 1054
|
||||
select grp,group_concat(c order by 2) from t1 group by grp;
|
||||
|
||||
|
@ -1968,3 +1968,86 @@ drop table t1;
|
||||
|
||||
purge master logs before (select adddate(current_timestamp(), interval -4 day));
|
||||
|
||||
#
|
||||
# Test for bug #11762: subquery with an aggregate function in HAVING
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
CREATE TABLE t2 (c int, d int);
|
||||
CREATE TABLE t3 (e int);
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1,10), (2,10), (1,20), (2,20), (3,20), (2,30), (4,40);
|
||||
INSERT INTO t2 VALUES
|
||||
(2,10), (2,20), (4,10), (5,10), (3,20), (2,40);
|
||||
INSERT INTO t3 VALUES (10), (30), (10), (20) ;
|
||||
|
||||
SELECT a, MAX(b), MIN(b) FROM t1 GROUP BY a;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t3;
|
||||
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)>20);
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)<d);
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2 WHERE MAX(b)>d);
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE d >= SOME(SELECT e FROM t3 WHERE MAX(b)=e));
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e <= d));
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE d > SOME(SELECT e FROM t3 WHERE MAX(b)=e));
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e < d));
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING a IN (SELECT c FROM t2
|
||||
WHERE MIN(b) < d AND
|
||||
EXISTS(SELECT e FROM t3 WHERE MAX(b)=e AND e <= d));
|
||||
|
||||
SELECT a, SUM(a) FROM t1 GROUP BY a;
|
||||
|
||||
SELECT a FROM t1
|
||||
WHERE EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) = c) GROUP BY a;
|
||||
SELECT a FROM t1 GROUP BY a
|
||||
HAVING EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) = c);
|
||||
|
||||
SELECT a FROM t1
|
||||
WHERE a < 3 AND
|
||||
EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) != c) GROUP BY a;
|
||||
SELECT a FROM t1
|
||||
WHERE a < 3 AND
|
||||
EXISTS(SELECT c FROM t2 GROUP BY c HAVING SUM(a) != c);
|
||||
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a < ALL(SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING EXISTS(SELECT t3.e FROM t3 GROUP BY t3.e
|
||||
HAVING SUM(t1.a+t2.c) < t3.e/4));
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ALL(SELECT t2.c FROM t2
|
||||
WHERE EXISTS(SELECT t3.e FROM t3 GROUP BY t3.e
|
||||
HAVING SUM(t1.a+t2.c) < t3.e/4));
|
||||
-- error 1111
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ALL(SELECT t2.c FROM t2
|
||||
WHERE EXISTS(SELECT t3.e FROM t3
|
||||
WHERE SUM(t1.a+t2.c) < t3.e/4));
|
||||
-- error 1111
|
||||
SELECT t1.a from t1 GROUP BY t1.a HAVING AVG(SUM(t1.b)) > 20;
|
||||
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING AVG(t2.c+SUM(t1.b)) > 20);
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING AVG(SUM(t1.b)) > 20);
|
||||
|
||||
SELECT t1.a, SUM(b) AS sum FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.c FROM t2 GROUP BY t2.c
|
||||
HAVING t2.c+sum > 20);
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
Reference in New Issue
Block a user