自学内容网 自学内容网

【MySQL】聚合函数、group by子句

目录

聚合函数

count([distinct] column)

sum([distinct] column)

avg([distinct] column)

max([distinct] column)

min([distinct] column)

group by子句

1.如何显示每个部门的平均薪资和最高薪资

2.显示每个部门每种岗位的平均薪资和最低薪资

3.显示平均工资低于2000的部门和该部门的工资

having

4.显示平均工资低于2000的部门和该部门的工资,姓名为SMITH的雇员不参与统计

where和having有什么区别?


聚合函数

count([distinct] column)

返回查询数据的数量

sum([distinct] column)

返回查询到的数据的总和

avg([distinct] column)

返回查询到数据的平均值

max([distinct] column)

返回查询到数据的最大值

min([distinct] column)

返回查询到数据的最小值

group by子句

现在有一个雇员表,包含empno(雇员编号)、ename(雇员姓名)、job(岗位)、sal(薪资)、deptno(部门)。

1.如何显示每个部门的平均薪资和最高薪资

select deptno, max(sal) 最高,avg(sal) 平均 from EMP group by deptno;
//这里的group by语句是将部门分组,进而再通过聚合函数avg、max计算出各部门的平均薪资和最高薪资
//select 后跟depton

2.显示每个部门每种岗位的平均薪资和最低薪资

select deptno,job,avg(sal) 平均, min(sal) 最低 from emp group by deptno,job;
//group by子句后可跟多个列进行分组 

这样写可以吗?不可以

select ename,deptno,job,avg(sal) 平均, min(sal) 最低 from emp group by deptno,job;

这句指令的意思是显示各部门每种岗位的薪资平均值,并显示雇员姓名,这在逻辑上是行不通的,

在使用group by子句时,select后只能跟,group by后的字段名(列名),如果select后出现其他列名,mysql会报错。

3.显示平均工资低于2000的部门和该部门的工资

select deptno, avg(sal) depavg from emp group by deptno having depavg<2000;

having

having与group by配合使用,用于对分组后聚合统计后的数据进行筛选。

4.显示平均工资低于2000的部门和该部门的工资,姓名为SMITH的雇员不参与统计

select deptno,job, avg(sal) myavg from emp where rename != 'SMITH' group buy deptno,job having myavg<2000;

where和having有什么区别?

执行顺序不一样,对数据筛选的阶段不同。

 


原文地址:https://blog.csdn.net/2401_84568462/article/details/142579392

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!