| Bug #78183 | Similar query with aggregate functions returns inconsistent result | ||
|---|---|---|---|
| Submitted: | 24 Aug 2015 9:01 | Modified: | 1 Sep 2015 8:37 |
| Reporter: | Su Dylan | Email Updates: | |
| Status: | Not a Bug | Impact on me: | |
| Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
| Version: | 5.6.22 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[24 Aug 2015 9:01]
Su Dylan
[1 Sep 2015 7:34]
MySQL Verification Team
Hi Su Dylan,
Thank you for the report.
Imho this is by design and expected behavior that you cannot nest aggregate functions.
[root@cluster-repo ~]# mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.6.26-log MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> drop table if exists t1; create table t1(c1 int);
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
mysql> set sql_mode='';
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t1 values(1),(1),(2),(2),(2);
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> select count(c1) from t1 group by c1 having count(count(c1)) > 1;
ERROR 1111 (HY000): Invalid use of group function
mysql> select count(c1) c2 from t1 group by c1 having count(c2) > 1;
+----+
| c2 |
+----+
| 2 |
| 3 |
+----+
2 rows in set (0.00 sec)
mysql>
###
Postgres also complains:
-bash-4.2$ psql
psql (9.4.0)
Type "help" for help.
postgres=# drop table t1;
DROP TABLE
postgres=# create table t1(c1 int);
CREATE TABLE
postgres=# insert into t1 values(1);
INSERT 0 1
postgres=# insert into t1 values(1);
INSERT 0 1
postgres=# insert into t1 values(2);
INSERT 0 1
postgres=# insert into t1 values(2);
INSERT 0 1
postgres=# insert into t1 values(2);
INSERT 0 1
postgres=# select * from t1;
c1
----
1
1
2
2
2
(5 rows)
postgres=# select count(c1) from t1 group by c1 having count(count(c1)) > 1;
ERROR: aggregate function calls cannot be nested
LINE 1: select count(c1) from t1 group by c1 having count(count(c1))...
^
postgres=# select count(c1) as c2 from t1 group by c1 having count(c1) > 1;
c2
----
2
3
(2 rows)
Thanks,
Umesh
[1 Sep 2015 8:37]
Su Dylan
Hi Umesh, Thanks for the feedback. You answers the first question well. How about the second question? ===== 2. For the following SQL, the following output is expected, since max(c2) which is 3 matches max(c2> > 1. Is this a bug? +----+ | c2 | +----+ | 2 | | 3 | +----+ mysql> select count(c1) c2 from t1 group by c1 having max(c2) > 1; Empty set (0.00 sec) Thanks!
