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

相关推荐
Mr. zhihao11 分钟前
装饰器模式详解:动态扩展对象功能的优雅解决方案
java·开发语言·装饰器模式
zyhomepage11 分钟前
科技的成就(六十四)
开发语言·人工智能·科技·算法·内容运营
Ethan Wilson17 分钟前
C++/QT可用的websocket库
开发语言·c++·websocket
小宇1 小时前
The valid characters are defined in RFC 7230 and RFC 3986
java·开发语言·后端·tomcat
尘浮生1 小时前
Java项目实战II基于Spring Boot的美食烹饪互动平台的设计与实现(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·微信小程序·小程序·美食
forestqq1 小时前
构建后端为etcd的CoreDNS的容器集群(七)、编写适合阅读的域名管理脚本
运维·数据库·etcd
杨荧1 小时前
【JAVA毕业设计】基于Vue和SpringBoot的校园美食分享平台
java·开发语言·前端·vue.js·spring boot·java-ee·美食
hongkid1 小时前
MongoDB常用操作
数据库·mongodb
糊涂君-Q1 小时前
Python小白学习教程从入门到入坑------第十九课 异常模块与包【下】(语法基础)
开发语言·python·学习·程序人生·改行学it
爱编程的小新☆1 小时前
Java篇图书管理系统
java·开发语言·学习