public class Demo1 { public static void main(String[] args) { /*group by 的使用 (1)显示 每种岗位的雇员总数 平均工资 * select count(*),avg(sal),job from emp group by job; *2.显示雇员总数,以及获得补助的雇员数 select count(*),count(comm) from emp; 思考: 统计没有获得补助的雇员数 select count(*),count(if(comm is null,1,null)) 表示若comm为空,返回1,不为空返回0 from emp; *3.显示管理员的总人数 select count(distinct mgr) from emp; * 4.显示雇员工资的最大差额 select max(sal)-min(sal) from emp; having 子句是对分组后的语句进行判断 where 子句是对分组前的语句进行判断 limit 用来限制起始行,总行数(起始行从0开始) 总结: 如果select语句中 同时包含有where, group by ,having,limit ,order by name他们的顺序是 group by,having ,order by, 例:统计各个部门 group by 的平均工资(avg),并且要大于1000的(having), 并且按照平均工资从高到低排序(order by),取出两行记录(limit) select deptno ,avg(sal) from emp group by deptno having avg_sal>1000 order by avg_sal desc limit 0,2; * */
//1.增强 group by的使用 //(1)显示每种岗位的雇员人数,平均工资 //select count(*) ,avg(sal) ,job from emp group by job; //(2)显示雇员总数,以及获得补助的雇员数 注意:count(列) 如果该列的值为null,是不会统计进去的 //select count(*) count(comm) from emp ; //拓展: 统计没有获得补助的人数 //select count(if(comm is null,1,null)) from emp ; //(3)显示管理者的总人数 //select count(distinct mgr) from emp; distinct 去重 //(4)显示雇员工资的最大差额 //select max(sal)-min(sal) from emp; //顺序不能乱放 //例:统计各个部门(group by)的平均工资 AVG,并且是大于1000的(having),并且按照从高到低排序(order by),取出前两行记录(limit) //select deptno ,avg(sal) as avg_sal from emp group by deptno having avg_sal > 1000 order by avg_sal desc limit 0,2;
} }