分组函数使用注意:

针对于班上所有的同学:

分组情况1-按照性别分组:男生一组,女生一组,之后可以统计男生和女生的数量;

分组情况2-按照年龄段分组:80后一组,90后一组;

分组情况3-按照籍贯分组:广东一组,湖南一组,江西一组;
语法:

    SELECT [DISTINCT] *|分组字段1 [别名] [,分组字段2 [别名] ,…] | 统计函数
     
    FROM 表名称 [别名], [表名称 [别名] ,…]
     
    [WHERE 条件(s)]
     
    [GROUP BY 分组字段1 [,分组字段2 ,…]]
     
    [ORDER BY 排序字段 ASC | DESC [,排序字段 ASC | DESC]];
    注意:
		    使用GROUP BY子句将表分成小组
		    组函数忽略空值,可以使用ifnull
		    结果集隐式按升序排列,如果需要改变排序方式可以使用order by 子句   
		    1,出现在SELECT列表中的字段,如果出现的位置不是在分组函数中,那么必须出现在GROUP BY子句中
			2,在GROUP BY 子句中出现的字段,可以不出现在SELECT列表中
		 3,如果没有GROUP BY子句,SELECT列表中的任何列或表达式不能使用统计函数(单独使用统计函数除外):

分组函数单独使用:

SELECT COUNT(empno) FROM emp;

错误的使用,出现了其他字段:

SELECT empno,COUNT(empno) FROM emp;

正确做法:

SELECT empno,COUNT(empno) FROM emp GROUP  BY empno,job;

如果现在要进行分组的话,则SELECT子句之后,只能出现分组的字段和统计函数,其他的字段不能出现:

正确做法:

SELECT job,COUNT(empno),AVG(sal)
 
FROM emp
 
GROUP BY job;

错误的做法:

SELECT deptno,job,COUNT(empno),AVG(sal)
 
FROM emp
 
GROUP BY job;

正确做法:

SELECT deptno,job,COUNT(empno),AVG(sal)
 
FROM emp
 
GROUP BY  deptno,job;

在group by 子句中,可以按单列进行分组,也可以在多列上进行分组,多列分组就是按照多个字段的组合进行分组,最终的结果也会按照分组字段进行排序显示。

-- 1,按照职位分组,求出每个职位的最高和最低工资
SELECT MAX(SAL),JOB FROM emp GROUP BY JOB;
 
-- 2,查询出每一个部门员工的平均工资
SELECT AVG(SAL),DEPTNO FROM emp GROUP BY DEPTNO;
 
-- 3,查询平均工资高于2000的部门和其平均工资
SELECT AVG(SAL),DEPTNO FROM emp GROUP BY DEPTNO HAVING AVG(SAL) >=2000;
 
-- 4,查询各个部门和岗位的平均工资
SELECT AVG(SAL),DEPTNO,JOB FROM emp GROUP BY DEPTNO,JOB;
 
-- 5,查询各个管理人员下员工的平均工资,其中最低工资不能低于1300,不计算老板
SELECT AVG(SAL),DEPTNO,JOB FROM emp GROUP BY job HAVING AVG(SAL) >1300;
 
-- 6,查询在80,81,82,83年各进公司多少人
SELECT COUNT(*),YEAR(HIREDATE) FROM emp WHERE YEAR(HIREDATE) IN ('1980','1981','1982','1983') GROUP BY YEAR(HIREDATE);

猜你喜欢

转载自blog.csdn.net/Rinvay_Cui/article/details/89454652