四、SQL分组查询

简介: 四、SQL分组查询

SQL中的分组函数与分组查询

语法

select [distinct] * | 列名1,列名2..., 列名n , 组函数(...)
from 表名1,表名2...
[where 条件][group by 列名1,列名2... ] 
[having 条件][order by 排序列名1 ASC | DESC , 排序列名2 ASC | DESC...]

分组函数

  • count(): 统计的是非null的个数
  • sum() :记录的总和
  • avg():平均值
  • max():最大值
  • min():最小值

1. 查询出所有员工的个数

select count(empno)
from emp
select count(comm)
from emp

2.  查询出所有员工的总薪资

select sum(salary)
from emp

3.  查询出所有员工的平均薪资

select avg(salary)
from emp

4. 查询出所有员工的最大薪资

select max(salary)
from emp

5. 查询出所有员工的最小薪资

select min(salary)
from emp

6. 统计各职位的员工个数

select job 职位, count(empno) 人数
from emp
group by job  -- 按照job 分组

7. 统计各部门的员工个数,根据部门编号升序排序

select deptno ,count(empno)
from emp
group by deptno
order by deptno

8. 统计各部门各职位的员工人数,根据部门编号升序排序,部门编号相同,则按照职位的字母先后顺序排序

部门编号  职位    人数
    10      clerk     9
    10      manager   3
    10      others    2
    20      clerk     5
    20      manager   6
    20      others    1
  select deptno 部门编号, job 职位,count(empno) 人数
  from emp
  group by deptno,job
  order by deptno,job

9. 统计10部门的各职位的员工人数(显示部门编号,职位名称,员工人数)

部门编号  职位    人数
  10      员工     9
  10      经理     3
  10      主管     2
  select  deptno 部门编号, job 职位,count(empno) 人数
  from emp
  where deptno=10
  group by job

10. 查询10部门的各职位的员工人数大于2的职位信息(显示部门编号,职位名称,员工人数)

部门编号  职位  人数
10      员工    9
10      经理    3
[10     主管    2 ---过滤出去]
select  deptno 部门编号, job 职位,count(empno)  人数
from emp
where deptno=10
group by job
having count(empno) >2

group by 分组使用注意事项:

  • (1)select 单列, 组函数 from ... 【错误】,一定要与group by 使用

where 与 having 的区别:

  • (1)where 是分组之前的要过滤的条件,where后面不能与组函数一起使用 【where 与分组无关】
  • (2)having 是分组之后的结果之上再做的过滤,having可以与组函数一起使用【having 与分组一起使用】

课堂练习

分组函数:
    count() : 总个数
    sum(): 总和
    avg(): 平均值
    max(): 最大值
    min(): 最小值
-- 1.查询所有员工人数
select count(empno) from emp
-- 2.查询所有员工总薪资
select sum(salary) from emp
-- 3.查询所有员工平均薪资
select avg(salary) from emp
-- 4.查询所有员工的最高薪资
select max(salary) from emp
-- 5.查询所有员工最低工资
select min(salary) from emp
-- 6. 查询出20部门的最高薪资
select max(salary)
from emp
where deptno = 20
-- 7.查询出职位是'CLERK'部门的平均薪资
select avg(salary) from emp where job = 'CLERK'
-- 8.查询出30部门的员工人数
select count(empno)from emp where deptno = 30
-- 9.查询出10,20部门的总薪资
select sum(salary)from emp where deptno = 10 or deptno =20
--  -----------------分组查询 group by -----------------
-- 10.查询出每个部门的人数
select deptno ,count(empno)
from emp
group by deptno
-- 12.  查询出各职位的平均薪资,按照薪资降序排序
select job ,avg(salary)
from emp
group by job 
order by avg(salary) desc
-- 13.  查询出各部门的最高薪资值
select job ,max(salary)
from emp 
group by job
-- 14.  查询出各职位的薪资总和
select job ,sum(salary)
from emp
group by job
-- 15.  查询出各部门各职位的员工人数
select deptno,job ,count(empno)
from emp
group by deptno,job
order by  count(empno) asc
-- 14.  查询出各部门薪资2000的员工个数
select deptno,count(empno)
from emp
where salary > 2000
group by deptno
--  =======================having 使用=================
having + group by :分组之后进行的条件过滤
-- 15.  查询出各部门员工个数超过3的部门编号,人数 
select deptno,count(empno)
from emp
group by deptno
-- 分组之后的筛选
having count(empno) >3
目录
相关文章
|
3月前
|
SQL 监控 关系型数据库
一键开启百倍加速!RDS DuckDB 黑科技让SQL查询速度最高提升200倍
RDS MySQL DuckDB分析实例结合事务处理与实时分析能力,显著提升SQL查询性能,最高可达200倍,兼容MySQL语法,无需额外学习成本。
|
3月前
|
SQL 存储 关系型数据库
MySQL体系结构详解:一条SQL查询的旅程
本文深入解析MySQL内部架构,从SQL查询的执行流程到性能优化技巧,涵盖连接建立、查询处理、执行阶段及存储引擎工作机制,帮助开发者理解MySQL运行原理并提升数据库性能。
|
7月前
|
SQL 数据挖掘 数据库
第三篇:高级 SQL 查询与多表操作
本文深入讲解高级SQL查询技巧,涵盖多表JOIN操作、聚合函数、分组查询、子查询及视图索引等内容。适合已掌握基础SQL的学习者,通过实例解析INNER/LEFT/RIGHT/FULL JOIN用法,以及COUNT/SUM/AVG等聚合函数的应用。同时探讨复杂WHERE条件、子查询嵌套,并介绍视图简化查询与索引优化性能的方法。最后提供实践建议与学习资源,助你提升SQL技能以应对实际数据处理需求。
581 1
|
3月前
|
SQL 监控 关系型数据库
SQL优化技巧:让MySQL查询快人一步
本文深入解析了MySQL查询优化的核心技巧,涵盖索引设计、查询重写、分页优化、批量操作、数据类型优化及性能监控等方面,帮助开发者显著提升数据库性能,解决慢查询问题,适用于高并发与大数据场景。
|
2月前
|
SQL 关系型数据库 MySQL
(SQL)SQL语言中的查询语句整理
查询语句在sql中占了挺大一部分篇幅,因为在数据库中使用查询语句的次数远多于更新与删除命令。而查询语句比起其他语句要更加的复杂,可因为sql是数据库不可或缺的一部分,所以即使不懂,也必须得弄懂,以上。
252 0
|
4月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
322 18
|
9月前
|
SQL 运维 监控
SQL查询太慢?实战讲解YashanDB SQL调优思路
本文是Meetup第十期“调优实战专场”的第二篇技术文章,上一篇《高效查询秘诀,解码YashanDB优化器分组查询优化手段》中,我们揭秘了YashanDB分组查询优化秘诀,本文将通过一个案例,助你快速上手YashanDB慢日志功能,精准定位“慢SQL”后进行优化。
|
9月前
|
SQL 索引
【YashanDB知识库】字段加上索引后,SQL查询不到结果
【YashanDB知识库】字段加上索引后,SQL查询不到结果
|
4月前
|
SQL 人工智能 数据库
【三桥君】如何正确使用SQL查询语句:避免常见错误?
三桥君解析了SQL查询中的常见错误和正确用法。AI产品专家三桥君通过三个典型案例:1)属性重复比较错误,应使用IN而非AND;2)WHERE子句中非法使用聚合函数的错误,应改用HAVING;3)正确的分组查询示例。三桥君还介绍了学生、课程和选课三个关系模式,并分析了SQL查询中的属性比较、聚合函数使用和分组查询等关键概念。最后通过实战练习帮助读者巩固知识,强调掌握这些技巧对提升数据库查询效率的重要性。
170 0
|
7月前
|
SQL 关系型数据库 MySQL
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路
凌晨2点报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路