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,大爺突然心生感慨,花有綠肥紅瘦,人有高矮胖醜,像你這樣簡單粗暴的求平均是不可取的,你的這種做法,你好比把你、比爾蓋茨、貝索斯、巴菲特、馬雲的財產加起來求平均值,莫名其妙的,你就成功登上了世界財富的巔峯。

 這個時候,對數據進行分組就是一件很有必要的事情了。屌絲就應該屌絲一起做聚合計算,高富帥就應該和高富帥一起做聚合計算,雖然計算出的結果很殘忍,但是這樣計算出的結果纔是符合事實的真相……

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