标题: select *from emp group by deptno;这个语句是不是group by 语句 [打印本页] 作者: 董俊霞 时间: 2011-7-19 10:27 标题: select *from emp group by deptno;这个语句是不是group by 语句 说出为什么是或者不是?作者: 毕仁杰 时间: 2011-7-19 10:49 标题: 回复 楼主 的帖子 运行结果:
第 1 行出现错误:
ORA-00979: 不是 GROUP BY 表达式
GROUP BY 子句的作用是把一个表划分为若干个组,常常结合分组函数来使用。
看楼主写的这个SQL语句,功能是把表emp按deptno分组,但是你按deptno分组时,当有多个相同的deptno如deptno为20的有4个,你用select * 表示选择emp表的所有列,包括empno等,你把deptno为20 的分成一组,那你的empno怎么显示,4个empno你显示那个?这就是错误之所在。
综上所述:这个语句是个错误的group by 语句,可以改为 select avg (sal) from emp group deptno;该sql语句表示把emp表按部门号(deptno)分组求各部门的平均工资。
group by是按一列(或多列)的值进行分组,可能把多行分到一组。
对于select 列x… group by 列1…语句,列x… 只能是列1…的子集,也就是说,如果group by A,B,那么select A,B,C就是错的,因为出现了group by中没有的C。如果要选择C,那就使用聚集函数(count(数目), sum(和),avg(均值), max(最大值)和min(最小值)),这是在分组内进行相应的计算。如select A , B , max(C) from table group by A , B。