AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

SQL 数据库 学习 027 查询-10 Group by --- 以某字段分组


  • 我的电脑系统:Windows 10 64位
  • SQL Server 软件版本: SQL Server 2014 Express

本篇博客里面使用了 scott 库,如何你现在还没有添加这个库到你的服务器里面,请在查看本篇博客前,访问这篇博文来在你的服务器里面附加scott库。


group by — 以某字段分组

1
2
3
4
--输出每个部门的编号 和 该部门的平均工资
select deptno, avg(sal) as "部门平均工资"
  from emp
  group by deptno

Alt text


1
2
3
4
-- 判断下面语句是否正确
select deptno, avg(sal) as "部门平均工资" ename
  from emp
  group by deptno

Alt text

总结: 使用了 group by 之后, select 中只能出现分组后的整体信息,不能出现组内的详细信息。

1
2
3
4
--error
select *
  from emp
  group by deptno, job

Alt text

1
2
3
4
--error
select deptno, job, sal
  from emp
  group by deptno, job

Alt text

1
2
3
select deptno, job, avg(sal)
  from emp
  group by deptno, job

Alt text

显示的不是很好,我们就对其进行排序。(没有实际的意义,我们就是讲讲语法。)

1
2
3
4
select deptno, job, avg(sal)
  from emp
  group by deptno, job
  order by deptno

Alt text

只要是聚合函数,在这里都可以使用。

1
2
3
4
select deptno, job, avg(sal), count(*), sum(sal),  min(sal)
  from emp
  group by deptno, job
  order by deptno

Alt text


1
2
3
4
select deptno, job, avg(sal) "平均工资", count(*) "部门人数", sum(sal) "部门总工资",  min(sal) "部门最低工资"
  from emp
  group by deptno, job
  order by deptno

Alt text


总结:

group by

  • 格式: group by 字段的集合
  • 功能:把表中的记录按照字段分成不同的组
  • 注意:理解 group by a, b, c 的用法
    • 先按 a 分组,如果 a 相同,再按 b 分组,如果 b 相同,再按 c 分组。最终统计的最小分组的信息。

Comments