MySQL从删库到跑路(8):聚合函数——让我们来统计一下漂亮妹子的信息

 “李有为,我且问你,human_base_info表面,颜值最高的妹子能有多高?”

 听完大爷的话,李有为的嘴角情不自禁地绽开了一抹不易察觉的潇洒而自信的笑容,“大爷,虽然你没有给我讲给排序,但是我下来已经偷偷学了,用order by 对列名排序是吧!desc是降序,asc是升序,如果没有指定规则,则默认为降序排序

----- 查询妹子的姓名和颜值,对颜值进行降序排序
SELECT 
	name,looks 
FROM
	human_base_info 
WHERE
	sex = 'F' 
ORDER BY
	looks DESC;

-----查询妹子的姓名和颜值,对颜值进行升序排序

SELECT 
	name,looks 
FROM
	human_base_info 
WHERE
	sex = 'F' 
ORDER BY
	looks ASC;

 “最漂亮的妹子颜值高达255,竟然比颜值最低的妹子足足多了250,我的天喃!”

 “啪!“,一个响亮的耳光打在了李有为头发,”我看你娃真的是球经不懂,抱到狗怂。

 “我现在最关心的是最漂亮的妹子颜值能够多高,你给我查一大堆妹子的名字干什么,虽然你的确查到了妹子的最高颜值是多少,但是这是你大爷我想要的吗?,说到底,我想要的其实就是一个数字,不是你这一大堆东西。”

 “der,你是大爷,你说的都对!”

 "啪!"又是一记响亮的耳光打在李有为弱小的身躯上,“龟儿子,还敢给老子嘴嚼,翅膀都还没长硬,就像飞了嗦!”

今天就要你大爷教你用聚合函数,最快速的找到世界上嘴漂亮的妹子颜值有多高。

 聚合函数是SQL的基本函数,其作用是对一组值执行计算,并返回单个值

 看你小子是一个有色心、没色胆的家伙,那么我就举一个你最容易理解的例子。

在这里插入图片描述
please see here,there hava some beautiful girl info,其中包括,姓名,身高,年龄,和颜值,你是不是可以轻易的说出身高最高的妹子和身高最矮的妹子,也可以计算出妹子们的平均身高,同时也可以统计一共有多少个妹子,甚至还可以算一下妹子们的年龄和

 “最高的妹子179.1,最矮的妹子170.4,妹子们的平均身高是173.475,一共有8个妹子,妹子们的年龄和是181”,听完大爷的话,李有为立马脱口而出,他小学数学神童的称号保留至今,并非浪得虚名。

 **“good very good very very very good!”**大爷一边称赞李有为,一边却又阴险的笑出了声,”嘿嘿嘿嘿嘿嘿嘿嘿……,如果我想要看human_base_info表里,最高的妹子有多高,最漂亮的妹子有多漂亮,妹子们的平均身高,年龄最小的妹子有多小,妹子们的数量一共有多少,妹子们的年龄和是多少,这个时候你想要怎么办涅?嘿嘿嘿嘿嘿嘿嘿……

 "芽儿哟,前辈,你真当我是**粪坑里面练游泳,不怕死(屎)**索!我晓得你肯定有招式,你就说给我听嘛!“

 好,接下来就让你看一下MySQL的五个聚合函数。

AVG()		-- 返回某列的平均值
MAX()		--返回某列的最大值
MIN()		--返回某列的最小值
SUM()		--返回某列数值之和(该列必须是数值)
COUNT()		--返回该列的行数

---- 聚合函数针对特定列做计算,都会忽略空值的那一列

1 AVG

 说明:AVG可以返回指定列的平均值,如果加上where条件,则返回符合条件列的平均值

----- 返回所有人的平均年龄
SELECT
	AVG (age)
FROM
	human_base_info


----- 返回女生的平均年龄
SELECT
	AVG (age)
FROM
	human_base_info
WHERE sex='F'

在这里插入图片描述
在这里插入图片描述

2、MAX 、MIN 、SUM用法类似

 说明:MAX,MIN,SUM函数的用法和AVG类似,支持所有的,也支持满足特定条件的列做聚合,这里不做多说明

SELECT
	MAX(age)
FROM
	human_base_info
WHERE sex='F'

SELECT
	MIN(age)
FROM
	human_base_info
WHERE sex='F'

SELECT
	SUM(age)
FROM
	human_base_info
WHERE sex='F'

3、count

 说明:count是SQL中做统计使用频率最高的一个聚合函数,但是使用count,必须要知道count(1),count(*),count(列名)这三个的区别

 1、count(1),count(*),严格意思上讲,count(1)和count()都对所有行计数,并没有什么太大的区别,唯一的区别就是,count()是SQL92定义的标准统计行数的语法。(有人会说两者中一个快些,一个慢些,但这些都问题不大。)

 2、count(列名),count(列名)会筛选过滤掉该列字段不为NULL的数据,因此效率会比count(1)和count(*)慢,但是统计结果更为精准。

/*
这里1、2、3句SQL统计出来的结果都是一样的都是110519
最后一句统计出来的结果是110518,因为我偷偷其中一个人的年龄信息修改成了空值

*/
SELECT
	COUNT (1)
FROM
	human_base_info

SELECT
	COUNT (*)
FROM
	human_base_info

SELECT
	COUNT (id)
FROM
	human_base_info

SELECT
	COUNT (age)
FROM
	human_base_info

 听完大爷的话,李有为当下便写了一段SQL,立马把妹子们的信息给统计出来,原来把这个世界上的妹子算的明明白白,竟然是这么容易的一件事情。

在这里插入图片描述

 看完李有为的SQL,大爷突然心生感慨,花有绿肥红瘦,人有高矮胖丑,像你这样简单粗暴的求平均是不可取的,你的这种做法,你好比把你、比尔盖茨、贝索斯、巴菲特、马云的财产加起来求平均值,莫名其妙的,你就成功登上了世界财富的巅峰。

 这个时候,对数据进行分组就是一件很有必要的事情了。屌丝就应该屌丝一起做聚合计算,高富帅就应该和高富帅一起做聚合计算,虽然计算出的结果很残忍,但是这样计算出的结果才是符合事实的真相……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章