结论:
首先我说的分组函数嵌套是这样的:分组函数1(分组函数2()),mysql中不可以这样使用,而Oracle中可以这样使用
演示:
例如我们需要获取人数最多的部门人数,我们使用的sql语句是:select max(count(*)) from emp group by deptno;
,如果在mysql中执行会出现如下错误:
[SQL] select max(count(*)) from emp group by deptno;
[Err] 1111 - Invalid use of group function
如果在Oracle中使用可以正常执行,如下所示:
如果mysql中也想实现同样的效果,可以这样做:
select max(a.num) from (select count(*) num from emp group by deptno) a;
结果如下:
接下来给出一个面试题来说明上面的问题:
面试题:以下哪行有错:
SELECT deptno
FROM emp
GROUP BY deptno
HAVING COUNT(deptno)=
(SELECT max(count(deptno))
FROM emp
GROUP BY deptno);
A、Line 3
B、Line 4
C、Line 5
D、Line 6
E、都没错
答案:如果是mysql数据库,那就选C;如果是Oracle数据库,那就选E;
解释:
由于sql语句中使用到了分组函数嵌套,其中mysql不支持分组函数嵌套,Oracle支持分组函数嵌套,所以有这样的结果,可以实际证明,mysql中执行结果如下:
Oracle执行结果如下: