SELECT ENAME,JOB,DEPTNO,SAL,CASE
2 WHEN SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO ) THEN '*'
3 WHEN SAL IN (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO) THEN '-'
4 END "MAX/MIN"
5 FROM EMP ORDER BY SAL DESC;
这段sql 是正确的 可是我就是不明白为什么?
在 group by 后写deptno 是正确的,不是说查询时 必须有
列名为deptno 这一列才可以.
2 WHEN SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO ) THEN '*'
3 WHEN SAL IN (SELECT MIN(SAL) FROM EMP GROUP BY DEPTNO) THEN '-'
4 END "MAX/MIN"
5 FROM EMP ORDER BY SAL DESC;
这段sql 是正确的 可是我就是不明白为什么?
在 group by 后写deptno 是正确的,不是说查询时 必须有
列名为deptno 这一列才可以.
在group by后面的字段,在前面select出现,这个可以有
在select中出现字段(非聚合函数参数的字段),在group by中,这个必须有
SQL> select max(sal) from emp;
--不分部门号,就是找出最高工资
MAX(SAL)
----------
5000SQL> select deptno,max(sal) from emp;select deptno,max(sal) from emp
ORA-00937: not a single-group group function
--看错误提示,因为检索字段多加了一个deptno,我们应该对deptno进行分组
--为什么呢?因为不止一个部门,如果不对部门分组的话,
--oracle不知道取出哪一个部门的最高工资
SQL> select deptno,max(sal)
2 from emp
3 group by deptno;DEPTNO MAX(SAL)
------ ----------
10 5000
20 3100
30 2850
--
SQL> select deptno,min(sal) from emp
2 group by deptno;DEPTNO MIN(SAL)
------ ----------
10 1300
20 800
30 950
--
SQL> select deptno,min(sal) from emp
2 /select deptno,min(sal) from empORA-00937: not a single-group group function
如果select 中有有聚合函数字段,group by 是必须有的。
字段前用了min,sun,nvl,decode等都可以在个group by 中没有这个字段的