mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Merge moonbone.local:/work/27219-5.0-opt-mysql
into moonbone.local:/work/27219-bug-5.1 sql/item_subselect.cc: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/mysql_priv.h: Auto merged sql/sql_lex.cc: Auto merged sql/sql_select.cc: Auto merged mysql-test/r/group_by.result: SCCS merged mysql-test/t/group_by.test: SCCS merged sql/item.cc: SCCS merged sql/sql_lex.h: SCCS merged
This commit is contained in:
@ -823,6 +823,123 @@ SELECT * FROM t1 GROUP BY c2 ORDER BY c2 DESC, c1 DESC;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#27219: Aggregate functions in ORDER BY.
|
||||
--echo #
|
||||
SET @save_sql_mode=@@sql_mode;
|
||||
SET @@sql_mode='ONLY_FULL_GROUP_BY';
|
||||
|
||||
CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 0);
|
||||
INSERT INTO t1 (a, b) VALUES (3,3), (2,2), (3,3), (2,2), (3,3), (4,4);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*);
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*) + 1;
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*) + a;
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*), 1;
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 ORDER BY COUNT(*), a;
|
||||
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a);
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a + 1);
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a) + 1;
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 ORDER BY SUM(a), b;
|
||||
|
||||
--error 1140
|
||||
SELECT a FROM t1 ORDER BY COUNT(b);
|
||||
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2);
|
||||
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a), t2.a FROM t2);
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT SUM(t2.a) FROM t2 ORDER BY t2.a);
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 ORDER BY (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.b) LIMIT 1);
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a IN (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING t1.a > ANY (SELECT t2.a FROM t2 ORDER BY t2.a, SUM(t2.b));
|
||||
|
||||
--error 1140
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 ORDER BY SUM(t1.b));
|
||||
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY SUM(t2.a) LIMIT 1);
|
||||
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + 1) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(SUM(t1.b) + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
--error 1140
|
||||
SELECT 1 FROM t1 GROUP BY t1.a
|
||||
HAVING (SELECT AVG(t1.b + t2.b) FROM t2 ORDER BY t2.a LIMIT 1);
|
||||
|
||||
# Both SUMs are aggregated in the subquery, no mixture:
|
||||
SELECT t1.a FROM t1
|
||||
WHERE t1.a = (SELECT t2.a FROM t2 GROUP BY t2.a
|
||||
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1);
|
||||
|
||||
# SUM(t1.b) is aggregated in the subquery, no mixture:
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2 GROUP BY t2.a
|
||||
ORDER BY SUM(t2.b), SUM(t1.b) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
|
||||
# 2nd SUM(t1.b) is aggregated in the subquery, no mixture:
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||
ORDER BY SUM(t2.b) + SUM(t1.b) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
|
||||
# SUM(t2.b + t1.a) is aggregated in the subquery, no mixture:
|
||||
SELECT t1.a, SUM(t1.b) FROM t1
|
||||
WHERE t1.a = (SELECT SUM(t2.b) FROM t2
|
||||
ORDER BY SUM(t2.b + t1.a) LIMIT 1)
|
||||
GROUP BY t1.a;
|
||||
|
||||
SELECT t1.a FROM t1 GROUP BY t1.a
|
||||
HAVING (1, 1) = (SELECT SUM(t1.a), t1.a FROM t2 LIMIT 1);
|
||||
|
||||
select avg (
|
||||
(select
|
||||
(select sum(outr.a + innr.a) from t1 as innr limit 1) as tt
|
||||
from t1 as outr order by outr.a limit 1))
|
||||
from t1 as most_outer;
|
||||
|
||||
--error 1140
|
||||
select avg (
|
||||
(select (
|
||||
(select sum(outr.a + innr.a) from t1 as innr limit 1)) as tt
|
||||
from t1 as outr order by count(outr.a) limit 1)) as tt
|
||||
from t1 as most_outer;
|
||||
|
||||
select (select sum(outr.a + t1.a) from t1 limit 1) as tt from t1 as outr order by outr.a;
|
||||
|
||||
SET sql_mode=@save_sql_mode;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
# Bug #21174: Index degrades sort performance and
|
||||
# optimizer does not honor IGNORE INDEX.
|
||||
|
Reference in New Issue
Block a user