[mysql]多行函数:聚合函数

多行函数:聚合函数

聚合函数我们也叫聚集分组函数,他是把一组数据进行汇总的函数,输入的是一组数据的集合,输出的是单个值.

进去多个值返回的一定是一个值.对一组数据返回一个值,比如我们要返回工资表里的最大值,我们就要对这组字段进行MAX函数汇总.

聚合函数类型:

#1我们常见的几个聚合函数

1:AVG/SUM

2MAX/MIN

3COUNT

求方差标准差中位数,这个是不是也是聚合函数,方差开根号就是标准差,是用来衡量数据的稳定性.比如A和B的平均数一样,我们就要选方差更低的一个,那么它的每次成绩都是接近平均数.

中位数也是计算我们社区国家的平均薪资有多少,这时候我们就可以取平均值,或者中位数.假设现在有5个人,的月工资都比较低只有1000元,第6个人的工资有1000000.,如果我们取平均工资,那就不合适了,我们取中位数比较好,如果平均工资和中位数就说明贫富差距很大这里拉回来,

我们这里只讲着5个,我们看这几个函数的名字是不是心里就有底了.

  1. AVG/SUM

AVG是计算平均值,SUM是计算求和的.

SELECT SUM(salary),AVG(salary) FROM employees

SELECT SUM(last_name) FROM employees

,如果我们计算的是字符串这个函数是没有意义的,在mysql里会返回0,因为隐市转换

在oracle就会直接报错无效数字

即使大家在mysql里运行了有结果,那么也要注意一下,因为可能有问题.

日期类型大家也不要想了,这个结果也是没有意义的.

这就是我们想和大家强调的只能运行数值型的

MAX/MIN

SELECT MAX(salary),MIN(salary) FROM employees

SELECT MAX(last_name) FROM employees

我们对字符串可以计算大小吗,当然是可以的,因为我们字符串是可以按照ansi的标准来进行排序,所以我们可以对姓名进行求最大值.没有问题

同样也是支持时间类型的

SELECT MIN(last_name),MIN(hire_date) FROM employees

我们mysql的数据类型是很多的,12章中会将,最重要的急速max和min这些函数.

1.3Count

Count的作用的计算指定字段在查询结果中出现的个数

这个比较难一点,大家要理解一下

SELECT COUNT(employee_id),COUNT(salary) FROM employee

这里我们对salary计算数量,和它里面的数值是没有关系的.所以就算是2*salary也是107条,

那么我们现在要对count(1)来计算的时候,由于1会被我们把107个条记录都填充一次,所以 count就会计算出107条

我们如果计算表里有多少条记录如何实现,我们上面讲到了,我们可以

方式1:count(*)

方式2:count(1)常数

方式3count(字段)这里不一定对,这里不是挺好吗,不也是107吗,但是我们还要补充一个点

SELECTCOUNT( commission_pct) FROM employees

Ps:这里我们的count是不计算空值的

SELECT AVG(salay),SUM(salary)/COUNT(salary),SUM(salary)/count(107),AVG(salaryry),SUM(commission_pct)/107 FROM employees

这里建议大家想一下,sum是如何计算空值的.很多时候是希望大家面对未知的场景.所以希望大家想一下.这就是为什么大家喜欢高分的学生,因为他是面对陌生的题目比较熟练.

在我们上面的聚合函数的时候全部都不会计算null值.

大家可以稍微的计算一下,这里问大家一个问题,查询公司的平均奖金率,这里合不合适.

比如我们要查询全中国人的工资平均率,是不是要考虑14亿人,但是因为有2亿人没有工作,那么我们还是要对它进行计算.

所以不太合适直接使用AVG,因为其他人是0

我们应该写 SELECT SUM(salary)/COUNT(IFNULL(commission_pct,0)) FROM employees

GROUP BY的使用,

如果我们需要统计表中的记录数,我们可以使用COUNT(*) COUNT(1),COUNT(非空字段).那一个效果比较好,我们之后会说索引的时候会讲优化.

这里我们的存储引擎有关,大家在我们的职业发展的时候,很多情况都满足正态分布,和我们差不多的人很多,真正优秀的人是很少的,我们努力的效果刚开始可能是没什么作用的,但是我们一直努力,一直努力,因为差不多的人越来越少,工资就会突飞猛进.

如果我们使用的是MyiSam的引擎则三个的效率相同执行的复杂度都是O(N),如果我们使用的是InnoDB的引擎三者效率就不一样了, COUNT(*)=COUNT(1)>COUNT(非空字段).因为会找我们的二级索引会使用小的信息key_len的二级索引来扫描优化.所以前两个的效率就比高一些,之后我们将下篇的索引在具体和大家说.

相关推荐
肖永威7 分钟前
python列表常用方法大全
开发语言·python
愚润求学12 分钟前
【C++】vector的模拟实现
开发语言·c++·stl·语法
我的大老婆26 分钟前
【Python】Python 环境 + Pycharm 编译器 官网免费下载安装(图文教程,新手安装,Windows 10 系统)
开发语言·windows·经验分享·python·青少年编程·pycharm
m0_5557629032 分钟前
多人协同进行qt应用程序开发应该注意什么?
开发语言·qt
一只栖枝1 小时前
Oracle OCP知识点详解2:管理用户密码期限
数据库·oracle·开闭原则·ocp
PingCAP1 小时前
TiDB 亮相宜昌“医院‘云数智’技术实践研讨及成果展示交流会”,探讨国产化 + AI 背景下的数据库新趋势
数据库·人工智能·tidb
艾妮艾妮1 小时前
C语言常见3种排序
java·c语言·开发语言·c++·算法·c#·排序算法
努力的小Qin1 小时前
银河麒麟V10 aarch64架构安装mysql教程
数据库·mysql·架构
A_ugust__1 小时前
vue3项目使用 python +flask 打包成桌面应用
开发语言·python·flask