四、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
目录
相关文章
|
6天前
|
SQL 安全 数据库
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
如何在Django中正确使用参数化查询或ORM来避免SQL注入漏洞?
100 77
|
26天前
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
75 9
|
1月前
|
SQL 存储 人工智能
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
Vanna 是一个开源的 Python RAG(Retrieval-Augmented Generation)框架,能够基于大型语言模型(LLMs)为数据库生成精确的 SQL 查询。Vanna 支持多种 LLMs、向量数据库和 SQL 数据库,提供高准确性查询,同时确保数据库内容安全私密,不外泄。
184 7
Vanna:开源 AI 检索生成框架,自动生成精确的 SQL 查询
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
46 8
|
2月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
82 4
|
2月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
2月前
|
SQL 存储 缓存
如何优化SQL查询性能?
【10月更文挑战第28天】如何优化SQL查询性能?
207 10
|
2月前
|
SQL 关系型数据库 MySQL
|
3月前
|
SQL 数据库 开发者
功能发布-自定义SQL查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
|
3月前
|
SQL 移动开发 Oracle
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录