四、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
目录
相关文章
|
13天前
|
XML SQL 数据格式
XML动态sql查询当前时间之前的信息报错
XML动态sql查询当前时间之前的信息报错
34 2
|
21天前
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
61 0
|
6天前
|
SQL Java 数据库连接
JDBC连接SQL Server2008 完成增加、删除、查询、修改等基本信息基本格式及示例代码
这篇文章提供了使用JDBC连接SQL Server 2008数据库进行增加、删除、查询和修改操作的基本步骤和示例代码。
|
6天前
|
SQL 存储 分布式计算
|
12天前
|
SQL 存储 关系型数据库
SQL字符串查询有哪些坑?
本文通过创建一个包含不同格式姓名数据的表格,探讨了MySQL中字符排序规则(Collation)的影响。通过使用不区分大小写和空格的查询条件,文章演示了如何获取所有插入的记录,并解释了排序规则中"_ci"、"_cs"及"_bin"的区别。此外,还强调了在数据处理过程中,应考虑大小写敏感性和字符串前后空格的问题,以防导致统计或比较上的错误。最后,提供了Go语言中处理这类问题的方法,如使用`strings.EqualFold()`进行不区分大小写的字符串比较,以及使用`strings.TrimSpace()`去除字符串两端的空白字符。
|
18天前
|
SQL 安全 数据库
如何优化SQL查询
【8月更文挑战第1天】如何优化SQL查询
25 2
|
18天前
|
SQL 缓存 关系型数据库
SQL如何优化查询?
【8月更文挑战第1天】SQL如何优化查询?
27 1
|
21天前
|
SQL 存储 API
ES 实战复杂sql查询、修改字段类型
ES 实战复杂sql查询、修改字段类型
30 1
|
1天前
|
SQL 数据库
实时数仓 Hologres产品使用合集之如何找回之前的SQL查询代码
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
1天前
|
SQL 数据库 UED
SQL查询功能的全面解析与实用技巧
SQL(Structured Query Language)作为数据库管理的核心语言,其查询功能是实现数据检索、分析和报告的关键