MySQL基础之分组函数 mysql分组函数有哪些
wptr33 2024-11-09 15:00 45 浏览
分组函数主要用于统计,又称为聚合函数、统计函数或组函数。
常见的分组函数有:
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中函数使用的参数,不但要符合语法,并且要有意义。关于它们的参数类型,我们可以得出结论:
- sub、avg一般用于处理数值型。
- 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没错。
好了,对于分组函数的分享就到此。
相关推荐
- oracle中merge into语句详解(oracle的merge语句)
-
由于工作中使用,研究了mergeinto语句是insert与update语句的结合,可以同时实现update和insert的功能。一、mergeinto语句的语法。MERGEINTOsch...
- N张图告诉你K-DB为什么能全面兼容Oracle?
-
不是每一款数据库都能全面兼容Oracle,就像不是所有数据库都可以被称之为K-DB。一般数据库能做到的SQL标准和函数上兼容Oracle,而K-DB则能实现更多,在数据库体系架构、集群方式、数据库对象...
- ORACLE 错误代码及解决办法(oracle错误码942)
-
ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...
- SQL知识大全三):SQL中的字符串处理和条件查询
-
点击上方蓝字关注我们今天是SQL系列的第三讲,我们会讲解条件查询,文本处理,百分比,行数限制,格式化以及子查询。...
- LabVIEW实现Oracle数据库的访问(深入浅出labview数据库应用)
-
1.安装Oracle客户端下载:从Oracle官方网站下载适用于Windows操作系统的Oracle驱动程序。确保下载的版本与LabVIEW环境和操作系统兼容。...
- Oracle查询语句,你知道几个?(oracle常用查询语句)
-
介绍以下非常有用的Oracle查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等方面的查询。日期/时间查询1、获取当前月份的第一天运行这个命令能快速返回当前月份的第一天,可...
- Oracle数据库中判断字段不为空?(oracle数据库中判断字段不为空的函数)
-
Oracle数据库中如何判断字段不为空在Oracle数据库中,判断字段(列)不为空通常涉及到几种不同的场景和需求。下面是一些常见的方法来检查字段是否不为空:1.使用NVL函数NVL函数可以用来将NU...
- Oracle 字典表使用函数自动转码,自定义函数传参
-
创建函数模板CREATEORREPLACEFUNCTIONdic_val--定义函数(dict_idINVARCHAR2,codeINVARCHAR2)--定义参数RETURN...
- 从上百个字段到1个CLOB:Oracle JSON存储实战指南
-
陆沉盯着左右两个屏幕上显示的数据格式文档,右手小拇指无意思地一下又一下的敲击着机械键盘的Ctrl键,在清脆的“哒哒”声中思考着。...
- 程序员面试中问到的Oracle常用数据类型
-
Oracle中常用数据类型有:1、字符类型1.1、定长字符1.1.1、Char字符长度不够自动在右边加空格符号。最大存2000个字符,当字符长度超出2000个报错。不指定大小默认为1。1.1.2、...
- 了解 Oracle 中单引号与双引号的用法,一篇文章教会你!
-
无论测试或者开发,对数据库的增删改查都是家常便饭。但有些小知识是经常被忽略,却又不能不去了解的,例如单引号和双引号的用法和区别,看完这一篇,你肯定会有收获。...
- Oracle字符串转日期错误,试试TO_TIMESTAMP函数
-
最近,在工作中,发现有些字符串格式无法转换成日期格式,如下图:这种to_date是无法转换的,会报错,因此,需要用到:TO_TIMESTAMP,具体格式如下:TO_TIMESTAMP(字段名,...
- oracle——空字符串('')不能用和!=
-
oracle——空字符串('')不能用<>和!=最近在查询空字符串的数据时发现查询不出数据。后来发现以前的写法在oracle中不能用。记录一下:数据如下:...
- oracle的listagg函数,可以把多行转为一个字符串
-
oracle的listagg函数可以把多行转为一个字符串,用起来很方便,示例如下:witht1as(select'001'asitemcode,'苹果'...
- MySQL 教程的天花板--入门到高级(mysql实用教程)
-
给大家推荐一套MySQL的教程,堪称MySQL教程的天花板。此教程包含...
- 一周热门
-
-
因果推断Matching方式实现代码 因果推断模型
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
git pull命令使用实例 git pull--rebase
-
git 执行pull错误如何撤销 git pull fail
-
面试官:git pull是哪两个指令的组合?
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
-
- oracle中merge into语句详解(oracle的merge语句)
- N张图告诉你K-DB为什么能全面兼容Oracle?
- ORACLE 错误代码及解决办法(oracle错误码942)
- SQL知识大全三):SQL中的字符串处理和条件查询
- LabVIEW实现Oracle数据库的访问(深入浅出labview数据库应用)
- Oracle查询语句,你知道几个?(oracle常用查询语句)
- Oracle数据库中判断字段不为空?(oracle数据库中判断字段不为空的函数)
- Oracle 字典表使用函数自动转码,自定义函数传参
- 从上百个字段到1个CLOB:Oracle JSON存储实战指南
- 程序员面试中问到的Oracle常用数据类型
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)