SQL—分组函数

本文详细介绍了SQL分组函数,包括其定义、类型(如AVG、COUNT、MAX等)及使用方法。还阐述了分组函数与空值的关系,介绍了group by子句语法(含单列分组示例)、having子句用法,以及嵌套组函数的应用,并给出了相应示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL—分组函数

日期:2019.05.23
作者:chj

什么是分组函数

  • 分组函数作用于一组数据,并对一组数据返回一个值

分组函数类型

  • AVG 平均值
  • COUNT 统计值
  • MAX 最大值
  • MIN 最小值
  • SUM 合计
  • STDDEV 标准差(用的少)
  • VARIANCE 方差(用的少)
AVG、MAX、MIN、SUM函数的使用方法:
select avg(sal),max(sal),min(sal),sum(sal)
from emp;

  AVG(SAL)   MAX(SAL)   MIN(SAL)   SUM(SAL)
---------- ---------- ---------- ----------
2073.21429       5000        800      29025

COUNT函数的使用方法:
count(*):查看表格中非空值的行数

select count(*)
from emp;

  COUNT(*)
----------
        14

count(comm):查看comm列中的非空值行数:

select count(comm)
from emp;

COUNT(COMM)
-----------
          4

分组函数与空值

  • 分组函数忽略空值:
    emp表中有14人,因为分组函数直接忽略空值,所以可以计算出comm的综合,计算平均值时也只是对4个人做了计算:
select sum(comm),avg(comm)
from emp;

 SUM(COMM)  AVG(COMM)
---------- ----------
      2200        550
  • nvl函数使分组函数无法忽略空值:
select sum(nvl(comm,0)),avg(nvl(comm,0))
from emp;

SUM(NVL(COMM,0)) AVG(NVL(COMM,0))
---------------- ----------------
            2200       157.142857

分组数据

group by 子句语法

  • 将信息表分成更小的组。这可以通过使用 group by 子句来实现。
  • group by子句的作用:将表中的数据分成若干组。
  • 在 select 列表中所有未包含在组函数中的列都应该包含在 group by 子句中。
使用单列分组
  • 例:查询公司各部门的员工个数
SQL> select deptno,count(*)
from emp
group by deptno;

    DEPTNO   COUNT(*)
---------- ----------
        30          6
        20          5
        10          3
使用单列分组
  • 例:查询各部门分别有什么工作岗位,各岗位有几个人
select deptno,job,count(*)
from emp
group by deptno,job;

    DEPTNO JOB         COUNT(*)
---------- --------- ----------
        20 CLERK              2
        30 SALESMAN           4
        20 MANAGER            1
        30 CLERK              1
        10 PRESIDENT          1
        30 MANAGER            1
        10 CLERK              1
        10 MANAGER            1
        20 ANALYST            2

having 子句用法

  • where子句和 having子句的区别
    having子句过滤组,where子句过滤记录
  • 例:查询各部门的平均薪水及部门编号,要求只有员工姓名中包含‘A’才参与统计,只列出平均薪水>1500的,按照平均薪水降序排列。
select deptno,avg(sal)
from emp
where ename like '%A%'
group by deptno
having avg(sal)>1500
order by 2 desc;

    DEPTNO   AVG(SAL)
---------- ----------
        10       2450
        30       1580

嵌套组函数

  • 例:从emp表中筛选平均工资最高的部门
select max(avg(sal))
from emp
group by deptno;

MAX(AVG(SAL))
-------------
   2916.66667
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值