My SQL Case_4: 分组查询练习

版权声明:转载请注明来源及作者,谢谢! 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语句:

  1. select 字段|表达式 from 表名
  2. where 条件
  3. group by 列名
  4. having 条件
  5. order by 列名
  6. limit 开始索引,长度

猜你喜欢

转载自blog.csdn.net/qq_42442369/article/details/84314996
今日推荐