我在看韩顺平的玩转ORACLE
里面说到这条语句:
select avg(sal),deptno from emp group by deptno
AVG(SAL) DEPTNO
---------- ------
1566.66666 30
2175 20
2916.66666 10
韩老师说,group by 语句后的字段,一定要在选择列里面出现,也就是说deptno一定要在select后出现,否则要出错。
但是我在我本机上查询:
select avg(sal) from emp group by deptno;
AVG(SAL)
----------
1566.66666
2175
2916.66666
发现这也是可以的,没有报错,只是部门那一列不显示而已。
这个是不是9i和10G的一个区别?他讲的是9i,我用的是10G。
------解决方案--------------------------------------------------------
1、9i和10g在这一点上没区别。
2、应该是你说反了吧,应该是:选择列里面出现的字段(除了使用聚合函数的字段),一定要在group by语句后出现。
------解决方案--------------------------------------------------------
不在组函数中的列或表达式都必须包含在group by子句中