百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

MySQL基础之分组函数

toyiye 2024-06-21 12:14 9 浏览 0 评论

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

常见的分组函数有:

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

简单插入几行数据来测试

简单使用

实例:

#sum
mysql> select sum(sal) as sum from emp;
+-------+
| sum |
+-------+
| 37700 |
+-------+
#avg
mysql> select avg(sal) as avg from emp;
+-----------+
| avg |
+-----------+
| 3770.0000 |
+-----------+
#max
mysql> select max(sal) from emp;
+----------+
| max(sal) |
+----------+
| 5000 |
+----------+
#min
mysql> select min(sal) from emp;
+----------+
| min(sal) |
+----------+
| 2000 |
+----------+
#count
mysql> 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没错。

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



相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码