分组函数主要用于统计,又称为聚合函数、统计函数或组函数。

常见的分组函数有:

SUM(expr) 求和AVG([DISTINCT] expr) 求平均值MAX(expr) 求最大值MIN(expr) 求最小值COUNT(DISTINCT expr,[expr...]) 计算个数

先建一个员工表用于测试,表名emp,包含姓名,部门编号,工作,工资,入职日期,奖金等信息。

 CREATE TABLE `emp` ( `id` int(255) NOT NULL AUTO_INCREMENT, `ename` varchar(255) DEFAULT NULL, `job` varchar(255) DEFAULT NULL, `sal` int(11) DEFAULT NULL, `deptNo` int(11) DEFAULT NULL, `hiredate` datetime NOT NULL, `bonus` int(11) DEFAULT NULL, `orderNo` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

简单插入几行数据来测试

简单使用

实例:

#summysql> select sum(sal) as sum from emp;+-------+| sum |+-------+| 37700 |+-------+#avgmysql> select avg(sal) as avg from emp;+-----------+| avg |+-----------+| 3770.0000 |+-----------+#maxmysql> select max(sal) from emp;+----------+| max(sal) |+----------+| 5000 |+----------+#minmysql> select min(sal) from emp;+----------+| min(sal) |+----------+| 2000 |+----------+#countmysql> select count(sal) from emp;+------------+| count(sal) |+------------+| 10 |+------------+

搭配其他函数使用

mysql> select round(avg(sal),2) as avg from emp;+---------+| avg |+---------+| 3770.00 |+---------+

参数的类型

同时使用数值、字符型和日期参数来测试

sum和avg

mysql> select sum(sal) , SUM(ename), sum(hiredate) from emp;+----------+------------+------------------------+| sum(sal) | SUM(ename) | sum(hiredate) |+----------+------------+------------------------+| 37700 | 0 | 201785163831138.000000 |+----------+------------+------------------------+mysql> select avg(sal) , avg(ename), avg(hiredate) from emp;+-----------+------------+---------------------------+| avg(sal) | avg(ename) | avg(hiredate) |+-----------+------------+---------------------------+| 3770.0000 | 0 | 20178516383113.8010000000 |+-----------+------------+---------------------------+

结果中看出,sum和avg的参数是字符和日期时,虽然没有语法错误,但却是没有意义的。

max和min

mysql> select max(sal) , max(ename), max(hiredate) from emp;+----------+------------+---------------------+| max(sal) | max(ename) | max(hiredate) |+----------+------------+---------------------+| 5000 | Zara | 2019-06-03 18:30:39 |+----------+------------+---------------------+mysql> select min(sal) , min(ename), min(hiredate) from emp;+----------+------------+---------------------+| min(sal) | min(ename) | min(hiredate) |+----------+------------+---------------------+| 2000 | Anette | 2016-02-10 18:32:03 |+----------+------------+---------------------+

字符和日期也是可以排序的,有可比较性,所以它们作为max和min的参数也能得到有意义的结果。

count

mysql> select count(sal) , count(ename), count(hiredate) from emp;+------------+--------------+-----------------+| count(sal) | count(ename) | count(hiredate) |+------------+--------------+-----------------+| 10 | 10 | 10 |+------------+--------------+-----------------+

同样,count使用字符型和日期也是有意义的。

MySQL中函数使用的参数,不但要符合语法,并且要有意义。关于它们的参数类型,我们可以得出结论:

  1. sub、avg一般用于处理数值型。
  2. max、min、count可以处理任意值。

是否忽略null

以emp表中的bonus列来测试。

先看一下数据

其中有5行的值是null,5行是非null。

sum与avg实例:

mysql> select sum(bonus), avg(bonus), sum(bonus)/5, sum(bonus)/10 from emp;+------------+------------+--------------+---------------+| sum(bonus) | avg(bonus) | sum(bonus)/5 | sum(bonus)/10 |+------------+------------+--------------+---------------+| 1650 | 330.0000 | 330.0000 | 165.0000 |+------------+------------+--------------+---------------+

首先,和是1650,我们通过计算能够知道,它与所有bonus值非null的行的加起来是一样的。

还有,和除以5的结果与agv计算的平均值相等,也就是说平均值的计算也是在非null的行中计算的。

所以sum和avg是忽略null的。

max和min

mysql> select max(bonus), min(bonus) from emp;+------------+------------+| max(bonus) | min(bonus) |+------------+------------+| 500 | 200 |+------------+------------+

max和min明显也是是忽略null的,否则在结果中,将会出现max的值或者min的值为null的情况了。

count

mysql> select count(bonus) from emp;+--------------+| count(bonus) |+--------------+| 5 | +--------------+

结果只有5行,显然count也是忽略null的。

所以,以上组合函数都是忽略null值的。我们在使用的时候要考虑字段值是否为null的情况。

和distinct搭配使用达到去重的效果

以sum为例:

mysql> select sum(DISTINCT sal), sum(sal) from emp;+-------------------+----------+| sum(DISTINCT sal) | sum(sal) |+-------------------+----------+| 32700 | 37700 |+-------------------+----------+1 row in set (0.00 sec)

表中有两个人的sal是5000,所去重后结果比没去重的少5000没错。

好了,对于分组函数的分享就到此。

mysql sum计算效率很慢_MySQL基础之分组函数相关推荐

  1. mysql sum计算效率很慢_MySQL--RDS下的分区表实践(文末附MySQL视频教程与面试题)...

    实践背景 项目中有的表空间太大,且行数太多,故决定对一些表进行分库分表.再研究选型方案的时候发现常用的一些分库分表的解决方案对业务代码修改较多,故决定采用MySQL的分区方案. 其实在我个人看来,分区 ...

  2. mysql 连接 分组_MySQL 基础 (四) 分组查询及连接查询

    MySQL 基础 (四) 分组查询及连接查询 MySQL 基础(四) 进阶 5 分组查询 语法: SELECT 分组函数, 列(要求出现在 group by 的后面) FROM 表 [where 筛选 ...

  3. mysql查询未讲课教师_MySQL基础(查) - osc_hghvwmhn的个人空间 - OSCHINA - 中文开源技术交流社区...

    #新建一个表 create database exercise; #查询表的信息 SELECT * FROM student; SELECT * FROM score; #查询student表的第二条 ...

  4. mysql数据库逆心_数据库系统基础笔记(7)--函数

    逆心 MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: 系统信息函数: 加密函数: 格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点 ...

  5. java8 多个字段分组_MySQL基础之分组查询

    在MySQL 查询 语句中,允许使用 GROUP BY 子句对结果分组. GROUP BY语法: select 分组函数, 列(要求在group by 子句后面)from 表名[where 条件]gr ...

  6. mysql 截取括号内字符串_Mysql中字符串截取函数

    MySQL中字符串的截取 substring_index(str,delim,count) 函数的使用较为普遍 函数括号里面的依次为:要分隔截取的字符串(如:"aaa_bbb_ccc&quo ...

  7. 介绍一下mysql的存储过程和搜索引擎_MySQL基础(四)—存储过程和存储引擎

    上一篇 MySQL基础(三)-函数.自定义函数 这一篇是对存储过程和存储引擎的笔记,其中操作的数据库在上一篇文章中有代码,可以去看一下. 1.存储过程 存储过程是SQL语句和控制语句的预编译集合,以一 ...

  8. MySQL中定义fk语句_MySQL基础篇/第3篇:MySQL基本操作语句.md · qwqoo/MySQL-Review - Gitee.com...

    ### 第3篇:MySQL基本操作语句 - MySQL基础操作 #### 排序检索数据 - 之前的数据没有进行排序,其是按照默认在数据表中的数据返回的 - SELECT语句的ORDER BY 子句进行 ...

  9. mysql 人名用什么类型_MySQL 基础(二)

    封面图片来源:沙沙野 01. DDL 数据定义语言 1). 创建表的基本语法 CREATE TABLE 表名( 字段名1 数据类型 约束规则, 字段名2 数据类型, 字段名3 数据类型, ..... ...

最新文章

  1. LINQ to SQL语句(4)之Join
  2. python用户输入算式并计算_Python 70行代码实现简单算式计算器
  3. wincc 报警记录 mysql_如何才能把WINCC报警记录中的数据通过SQL取上来-工业支持中心-西门子中国...
  4. Entity Framework Core 执行SQL语句和存储过程
  5. java可视化多人群聊,java 网络编程-TCP-多人群聊(自问自答)
  6. 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现
  7. 基于jQuery8款超赞的评分插件
  8. 终端安全求生指南(三)--脆弱性管理
  9. 怎么创建java项目?新建java项目的步骤
  10. html缎带按钮,6款丝带蝴蝶结系法图解_乌托家家居网
  11. java转换apk软件_jar软件转安卓apk软件
  12. 华为eNSP下载阿里云盘
  13. 介绍几个比较出名的编程acm题库
  14. 页面开机自启动,页面置顶显示,页面持续获得焦点,鼠标点击器源码
  15. BT.2020 新一代超高清UHD视频制作与显示系统标准
  16. 微信小程序实现自动登录
  17. ESP32烧录Arduino生成的bin文件
  18. itpt_TCPL 第五章:指针和数组 - 第八章:UNIX系统接口
  19. MapBoxGL.JS 画圆 (半径以米或千米为单位) 实现跟随地图缩放而缩放
  20. linux自动同步onedrive,如何在Linux中同步微软OneDrive

热门文章

  1. 七周七语言:Scala Day 3
  2. “没有找到iliertutil.dll,因此这个应用程序未能启动。”文件拷贝 PE 或者 dos...
  3. 关于Qt的事件循环以及QEventLoop的简单使用
  4. dll动态库调用约定
  5. datatable数据类型方法
  6. html博客页面实验报告,×××实验报告
  7. python处理word文档保留格式_python 处理document文档 保留原样式
  8. php post防止hash攻击,MyBB editpost.php脚本'posthash' 参数SQL注入漏洞
  9. java和Js中的类型转换_JavaScript 类型转换
  10. 风格迁移应用_图像也能做情感迁移?罗切斯特大学团队提出计算机视觉新任务...