版权声明:转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/84314996
分组查询:
- 对数据源中的数据按照某种类别进行分类之后再操作
- 定义分组查询的关键字:group by 列名
- 分组一般是跟聚合函数一起配合使用
- having 用于对分组后的结果进行过滤
数据源(emp表):
以下sql会查询到每一组中的第一个工资
# 以下sql会查询到每一组中的第一个工资
select sal from emp group by deptno;
获取emp表中的每一组员工的平均工资
# 获取emp表中的每一组员工的平均工资
select avg(sal) as avgsal from emp group by deptno;
获取emp表中的每一组员工的平均工资且显示部门编号
注意:
分组以后,select的查询字段只能是分组字段或者跟分组字段相关的字段
# 获取emp表中的每一组员工的平均工资且显示部门编号
# 分组以后,select的查询字段只能是分组字段或者跟分组字段相关的字段
select deptno,avg(sal) as avgsal from emp group by deptno;
获取emp表中的每一组员工的平均工资及每一组部门编号,按照平均工资降序排列
# 获取emp表中的每一组员工的平均工资及每一组部门编号,按照平均工资降序排列
select deptno,avg(sal) as avgsal from emp group by deptno order by avgsal desc;
获取部门编号大于等于20的每个部门员工的平均工资及部门编号
注意:
是先过滤还是先求平均值
# 获取部门编号大于等于20的每个部门员工的平均工资及部门编号
# 方法1 思路:先过滤出>=20的部门,然后在分组进求平均值
select deptno, avg(sal) from emp where deptno >= 20 group by deptno;
# 方法2 思路:先把每个部门的平均工资求出来,然后过滤>=20部门
select deptno, avg(sal) as asal from emp group by deptno having deptno>=20;
获取部门编号大于等于20的部门的平均工资中的最小的平均工资及部门编号
# 获取部门编号大于等于20的部门的平均工资中的最小的平均工资及部门编号
select deptno, avg(sal) as asal from emp where deptno >= 20 group by deptno order by asal asc limit 1;
总结:
一个完整的select语句:
- select 字段|表达式 from 表名
- where 条件
- group by 列名
- having 条件
- order by 列名
- limit 开始索引,长度