MySQL数据库,聚合函数

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文讲解:MySQL数据库中的聚合函数

1、聚合查询

1.1聚合函数

聚合函数查询又叫函数查询,它是通过一些特定的函数根据需求来查询相关的信息,常见的聚合函数为:

    • COUNT - 求总数,不包含某字段为null值
    • SUM - 求和,不包含某字段为null值
    • AVG - 求平均值,不包含某字段为null值
    • MAX - 求最大值,适用于数值、日期、字符串类型,不包含某字段为null值
    • MIN - 求最小值,适用于数值、日期、字符串类型,不包含某字段为null值

    聚合函数的使用是在select语句中实现的,因此它的语法为:select 聚合函数(字段) from 表名;


    首先我们创建一个名为test的数据库:

    //创建一个名为test的数据库
    mysql> create database test charset utf8;
    Query OK, 1 row affected (0.00 sec)
    //使用test数据库
    mysql> use test;
    Database changed

    image.gif

    创建数据库后,我们得通过use指令来使用这个数据库,这样我们在创建表和对表进行操作时数据的来源都是在这个数据库中。


    创建一个名为score的课程表:

    //创建一个课程表score
    mysql> create table score(
        -> id int,
        -> name varchar(20),
        -> chinese int,
        -> math int,
        -> english int);
    Query OK, 0 rows affected (0.02 sec)
    //插入四行数据
    mysql> insert into score(id,name,chinese,math,english) values
        -> (1,'张三',77,89,56),
        -> (2,'李四',85,98,32),
        -> (3,'王五',67,75,64),
        -> (4,'赵六',98,93,88);
    Query OK, 4 rows affected (0.00 sec)
    Records: 4  Duplicates: 0  Warnings: 0

    image.gif

    此时score表的内容为:image.gif编辑

    在创建好表后,下面我们就来看这些聚合函数在查询这张表中数据的具体的效果是什么样的,并且展示给大家。


    1.1.1count函数

    count函数我们不难理解,它是用来计数的一个函数。通常用来记录一个表中的某字段出现的次数。如使用count函数通过id计算总人数:

    mysql> select count(id) from score;
    +-----------+
    | count(id) |
    +-----------+
    |         4 |
    +-----------+
    1 row in set (0.01 sec)

    image.gif

    通过上述代码,我们可以看到通过count这个函数可以计算到了score表中id字段的总数。注意这里的总数是字段总个数,如果某一行为null则不列入计数总数当中。


    1.1.2sum函数

    sum函数,是用来计算总和的函数。如使用sum函数计算score表中chinese成绩的总数:

    mysql> select sum(chinese) from score;
    +--------------+
    | sum(chinese) |
    +--------------+
    |          327 |
    +--------------+
    1 row in set (0.00 sec)

    image.gif

    我们可以看到,使用sum函数可以很好的求道某一个字段的总和。当然在函数的后面也可以加上别名,如给sum(chinese)起别名位total:

    mysql> select sum(chinese) as total from score;
    +-------+
    | total |
    +-------+
    |   327 |
    +-------+
    1 row in set (0.00 sec)

    image.gif

    通过上述代码我们可以知道,聚合函数的后面是可以起别名的,起别名是通过as这个关键字来起的。其中as可以省略,但建议加上该关键字这样代码的可读性较高一些。


    1.1.3avg函数

    avg函数是用来求某一字段的平均值,如使用avg函数求english的平均值:

    mysql> select avg(english) from score;
    +--------------+
    | avg(english) |
    +--------------+
    |      60.0000 |
    +--------------+
    1 row in set (0.00 sec)

    image.gif

    通过上述代码我们可以看到,avg得到的结果默认保留了4位小数,那我们想要avg保留相应的小数可以这样做:

    mysql> select round(avg(english),2) as avg from score;
    +-------+
    | avg   |
    +-------+
    | 60.00 |
    +-------+
    1 row in set (0.00 sec)

    image.gif

    使用round函数,使得avg的结果保留相应的小数位。在上述程序中,我保留的是2位小数,大家可以根据需求自行设计。


    1.1.4max函数

    max函数是求得的是某一字段的最大值,如使用max函数求得math成绩的最大值:

    mysql> select max(math) from score;
    +-----------+
    | max(math) |
    +-----------+
    |        98 |
    +-----------+
    1 row in set (0.00 sec)

    image.gif

    我们可以看到,math字段的最大值98被查询出来了,max函数的用法也是很简单。


    1.1.5min函数

    通过上方讲解我们知道了max函数是求最大值的,那么min函数是求得某一字段的最小值,如使用min函数求得english成绩的最小值:

    mysql> select min(english) from score;
    +--------------+
    | min(english) |
    +--------------+
    |           32 |
    +--------------+
    1 row in set (0.00 sec)

    image.gif

    通过上述代码可以看到,english字段的最小值32被查找出来了,min函数的使用方法也是比较的简单。详细的聚合函数在此篇博文中有介绍:数据处理函数


    1.2group by子句

    在select中我们可以使用group by这个子句来对某一列来进行分组查询,同时在使用group by进行分组查询时,select指定的字段必需是分组依据字段进行查询的。它的语法为:select 字段 from 表名 group by 字段;

    查询score表中的id,name,math信息,通过id进行分组查询:

    mysql> select id,name,math from score group by id;
    +------+------+------+
    | id   | name | math |
    +------+------+------+
    |    1 | 张三 |   89 |
    |    2 | 李四 |   98 |
    |    3 | 王五 |   75 |
    |    4 | 赵六 |   93 |
    +------+------+------+
    4 rows in set (0.00 sec)

    image.gif

    我们可以发现上述的信息是按照id的升序进行排列的,当然这和我们默认的定义的一样的。如果我们想要进行降序排序,我们可以在group by 字段后面加上一个desc来达到降序排序效果:

    mysql> select id,name,math from score group by id desc;
    +------+------+------+
    | id   | name | math |
    +------+------+------+
    |    4 | 赵六 |   93 |
    |    3 | 王五 |   75 |
    |    2 | 李四 |   98 |
    |    1 | 张三 |   89 |
    +------+------+------+
    4 rows in set, 1 warning (0.00 sec)

    image.gif


    1.3having

    在进行group by子句进行分组后,需要对分组结果再进行条件过滤时,不得使用where语句只能使用having。它的用法为:group by 字段 having 条件;

    如按照id升序查询数学成绩在80分以上的同学:

    mysql> select id,name,math from score group by id having math > 80;
    +------+------+------+
    | id   | name | math |
    +------+------+------+
    |    1 | 张三 |   89 |
    |    2 | 李四 |   98 |
    |    4 | 赵六 |   93 |
    +------+------+------+
    3 rows in set (0.00 sec)

    image.gif

    通过上述代码我们可以看到,数学成绩为75的王五同学被过滤掉了。

    mysql> select id,name,math from score group by id where math > 80;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where math > 80' at line 1

    image.gif

    当我们使用where条件进行判断时就会出现报错。


    本期博文到这里结束了,内容比较简单,大家可以下来了可以自行测试一下这些函数。感谢你的阅读,我们下期再见。

    相关实践学习
    如何在云端创建MySQL数据库
    开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    相关文章
    |
    6月前
    |
    SQL 关系型数据库 MySQL
    mysql子查询、聚合函数
    mysql子查询、聚合函数
    |
    6月前
    |
    关系型数据库 MySQL 数据挖掘
    轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
    轻松入门MySQL:深入理解MySQL聚合函数,实战进销存项目中的应用与技巧(8)
    |
    6月前
    |
    关系型数据库 MySQL 数据库
    MySQL查询聚合函数与分组查询
    MySQL查询聚合函数与分组查询
    |
    2月前
    |
    SQL 关系型数据库 MySQL
    MySQL:表的设计原则和聚合函数
    本文详细介绍了数据库表设计的原则与范式,包括从需求中找到实体及其属性,确定实体间关系,并使用SQL创建具体表。文章还深入探讨了一范式、二范式和三范式的要求及不满足这些范式时可能遇到的问题。此外,文中通过实例解释了一对一、一对多和多对多关系的表设计方法,并介绍了如何使用聚合函数如 COUNT()、SUM()、AVG()、MAX() 和 MIN() 进行数据统计和分析。最后,文章还展示了如何通过 SQL 语句实现数据的复制和插入操作。
    53 7
    MySQL:表的设计原则和聚合函数
    |
    1月前
    |
    存储 关系型数据库 MySQL
    深度剖析:MySQL聚合函数 count(expr) 如何工作?如何选择?
    本文详细探讨了MySQL中count(expr)函数的不同形式及其执行效率,包括count(*)、count(1)、count(主键)、count(非主键)等。通过对InnoDB和MyISAM引擎的对比分析,解释了它们在不同场景下的实现原理及性能差异。文章还通过实例演示了事务隔离级别对统计结果的影响,并提供了源码分析和总结建议。适合希望深入了解MySQL统计函数的开发者阅读。
    54 0
    |
    3月前
    |
    SQL 数据挖掘 数据处理
    什么是数据库聚合函数?
    【8月更文挑战第2天】
    212 19
    什么是数据库聚合函数?
    |
    6月前
    |
    SQL 关系型数据库 MySQL
    【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
    【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
    【MySQL进阶之路 | 基础篇】MySQL之聚合函数与应用
    |
    4月前
    |
    关系型数据库 MySQL 数据挖掘
    MySQL 聚合函数案例解析:深入实践与应用
    MySQL 聚合函数案例解析:深入实践与应用
    |
    4月前
    |
    SQL 关系型数据库 MySQL
    MySQL 聚合函数深入讲解与实战演练
    MySQL 聚合函数深入讲解与实战演练
    |
    5月前
    |
    SQL 关系型数据库 MySQL
    MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)
    MySQL数据库——SQL(3)-DQL(基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询、案例练习)
    57 0