目录
- 聚合函数
- group by子句
聚合函数
常用的聚合函数有COUNT()、AVG()、SUM()、MAX()、MIN()。
- COUNT()函数:统计数据表中包含的记录行的总数,或者根据查询结果返回列中包含的数据行数。
COUNT(*)计算表中总的行数,不管某列是否有数值或者为空值。
COUNT(字段名)计算指定列下总的行数,计算时将忽略空值的行。
对于学生表来说:
- 实例
COUNT:
统计班级共有多少个同学:
mysql> select count(*) from students;
统计同学QQ的个数(去重):
mysql> select count(distinct QQ) from students;
- AVG()函数:通过计算返回的行数和每一行数据的和,求得指定列数据的平均值。
统计学生平均总分:
select avg(chinese + math + english) 平均总分 from students;
- SUM()函数:是一个求总和的函数,返回指定列值的总和。
SUM:
统计同学数学成绩总分:
mysql> select sum(math) from students;
统计同学数学成绩总分中<60的部分(没有结果就返回NULL):
mysql> select sum(math) from students where math < 60;
- MAX()函数:返回指定列中的最大值,不仅适用于查找数值类型,也可应用于字符类型。
统计英语最高分:
mysql> select max(english) from students;
- MIN()函数:返回查询列中的最小值,不仅适用于查找数值类型,也可应用于字符类型。
统计英语最低分:
mysql> select min(english) from students;
group by子句
对于员工表来说:
- EMP员工表
- DEPT部门表
- SALGRADE工资等级表
显示每个部门的平均工资和最高工资(以部分分组):
select deptno,avg(sal),max(sal) from EMP group by deptno;
显示每个部门的每种岗位的平均工资和最低工资(以部门和岗位分组):
select avg(sal),min(sal),job, deptno from EMP group by deptno, job;
显示平均工资低于2000的部门和它的平均工资:
首先要统计各部门的平均工资:
select avg(sal) from EMP group by deptno;
然后要取出其中<2000的部分:
select avg(sal) as myavg from EMP group by deptno having myavg<2000;
having其实类似于where,不同的是where是过滤表数据的,而having是过滤分组数据的。
对于查询语句来说,它们两个是可以同时存在的,先执行where过滤,再进行聚合,再进行分组,最后才是从分组里having过滤。