8. 分组和组函数

简介: <div style="font-family:微软雅黑; font-size:14px; line-height:21px; widows:auto">        组函数即《数据库函数》中提到的多行函数。每组记录作为整体计算,并返回一个结果,而不是每条记录返回一个结果。</div> <div style="font-family:微软雅黑; font-size:14px; line
        组函数即《数据库函数》中提到的多行函数。每组记录作为整体计算,并返回一个结果,而不是每条记录返回一个结果。

常用的5个组函数: (以下expr均可以是变量、常量、数据列,无特别说明则数据类型可为任意类型)

AVG([DISTINCT|all] expr):计算多行expr的平均值,数据类型:数值型。

DISTINCT:不计算重复值;all(省略时效果相同):需要计算重复值。


COUNT(*|[DISTINCT|all]expr,[expr...]):计算多行expr的总条数

*:统计该表内的记录行数;distinct:不计算重复值。

MAX(expr)、MIN(expr):计算多行expr的最值


SUM([DISTINCT|all] expr):多行expr的总和,数据类型:数值型


Note:
  • distinct 和 * 不能同时使用。
  • 组函数默认把所有记录当成一组,可使用group by显示分组。
  • group by当一列或多列的值完全相同时,才把这些记录当成一组。
  • group by 时 null也算一组,默认升序。
  • 很多数据库分组有严格规则,如果查询列表使用了组函数或select使用group by分组,则要求出现在select的字段,要么用组函数包起来,要么必须出现在group by子句中。因为组函数或group by都将导致只有一条输出,而系统无法确定输出哪条。【但MySQL没有这些规则,会输出该组的第一条记录

分组过滤having
  1. having子句后是条件表达式,满足该表达式的分组才会被选出来。
  2. 和where子句的区别:
  • where子句仅过滤行,过滤组必须用having子句;
  • where子句中不能使用组函数,having才可以;

多行expr的平均

SELECT

    AVG(ALL `level`)

FROM

    student;

 

#COUNT,多行expr条数,不考虑null

SELECT

    COUNT(*) # 记录条数

    COUNT(DISTINCT `level`) # level列有多少不同的

    COUNT(DISTINCT age, `level`) # agelevelnull,且不同时相等的行数 

    COUNT(DISTINCT*)DISTINCT*不能共,会报异常

FROM

    student;

 

SUM(expr)

SELECT

    SUM(`level`) # `level`列的和

    expr常量2,所以每行都相同

    # so理解行数的2,n*COUNT(*)

    SUM(2)

    SUM(DISTINCT 2) #每行都2,再去重,故值为2

FROM

    student;

 

MAX(expr)Min()

SELECT

    MAX(id) #id列的最大9

FROM

    student;

 

统计时对null的处理

SELECT

    AVG(IFNULL(`level`,0)) #不仅仅简单的赋,还增加了计算的列数

FROM

    student;

 

GROUP BY式分组,多列参数同时相等才算一组

null也算一组

SELECT

    NAME,

    # name显示当前组的字段(与升降序无关)

    sex,

    `level`,

    COUNT(*)

FROM

    student

GROUP BY

    # `levelDESC; # 降序

    LEVEL,

    sex;

 

having过滤组

SELECT

    sex,

    LEVEL,

    COUNT(*)

FROM

    student

GROUP BY

    sex # sex分组

HAVING

    要求不重复level数量大于等于3的组(此处结果只有女生组)

    count(DISTINCT `level`)>=3;

 

目录
相关文章
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
基于RuoYi实现多条件分组排序列表
|
6月前
|
弹性计算 网络协议 安全
安全组规则
安全组规则
134 3
|
2月前
如何优雅地对数据进行分组?
如何优雅地对数据进行分组?
35 0
|
5月前
|
BI
【Databend】分组集:教你如何快速分组汇总
【Databend】分组集:教你如何快速分组汇总
48 2
|
6月前
|
弹性计算 运维 安全
安全组介绍
安全组介绍
84 3
|
存储 SQL 关系型数据库
mysql数据分组 group by 多条件分组但条件不并列的分析
mysql数据分组 group by 多条件分组但条件不并列的分析
623 0
|
关系型数据库
分组
GROUP BY 语句根据一个或多个列对结果集进行分组。
es聚合查询并且返回对应组的数据
es聚合查询并且返回对应组的数据
443 0
|
SQL 数据挖掘 关系型数据库
数据的分组与计算
对数据集进行分组并对各组应用一个函数(无论是聚合还是转换),通常是数据分析工作中的重要环节。在数据集准备好之后,通常就是计算分组统计或生成透视表。pandas 提供了一个灵活高效的 groupby 功能,使我们可以高效地对数据集进行操作。 关系型数据库和 SQL 能够如此流行的原因之一就是其能够方便地对数据进行连接、过滤、转换和聚合。但是,像 SQL 这样的查询语言所能执行的分组运算的种类很有限,而由于 pandas 强大的表达能力,我们可以执行复杂得多的分组运算。
134 0
如何在分组报表中实现组内数据补空行及组内页码
在分组报表中,按某字段分组后,组内数据较多时一组会分多页显示,并且一组数据显示完成后要求下组从新的一页开始显示,这样就要求某组数据展示完后,如果数据不满整页,需要补足空行以达到更好的效果,某组分页后要求组内页码的生成以及页内小计功能,点击<a href="http://c.
1211 0