[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的二级索引来扫描优化.所以前两个的效率就比高一些,之后我们将下篇的索引在具体和大家说.

相关推荐
陌小呆^O^5 分钟前
Cmakelist.txt之win-c-udp-server
c语言·开发语言·udp
计算机毕设指导610 分钟前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study11 分钟前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
时光の尘26 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
以后不吃煲仔饭40 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师41 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者1 小时前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
The_Ticker1 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
程序猿阿伟1 小时前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
Elastic 中国社区官方博客1 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索