最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL初學(xué)者可以告別分組聚合查詢的困擾了

 更新時(shí)間:2021年10月26日 14:22:57   作者:數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)之美  
這篇文章主要為大家介紹了MySQL分組聚合查詢的難點(diǎn)講解,幫助MySQL初學(xué)著告別分組聚合查詢的困擾,有需要的朋友可以借鑒參考下,希望能夠有所進(jìn)步

1.分組查詢的原理圖

在這里插入圖片描述

對(duì)上述原始數(shù)據(jù),按照DEPARTMENT_ID(員工id)分組統(tǒng)計(jì)SALARY(薪水)的平均值。

在這里插入圖片描述

上述原理寫成代碼,應(yīng)該怎么寫呢?

select 
	department_id,avg(salary)
from 
	test
group by 
	department_id;

可以清楚地看到,使用department_id進(jìn)行分組后,系統(tǒng)默認(rèn)將department_id相同的號(hào)所在的行,分配在一起,你有幾個(gè)不同的department_id,就會(huì)分為幾組,每個(gè)組中的數(shù)據(jù)行數(shù),不一定都要相同。

當(dāng)自動(dòng)分配完成后,會(huì)根據(jù)你所寫的分組函數(shù),進(jìn)行組內(nèi)運(yùn)算。

也就是說,你使用的是sum()函數(shù),就會(huì)組內(nèi)求和;當(dāng)你使用的是avg()函數(shù),就會(huì)組內(nèi)求平均值;當(dāng)你使用的是count()函數(shù),就會(huì)進(jìn)行組內(nèi)計(jì)數(shù);當(dāng)你使用的是max()函數(shù),就會(huì)進(jìn)行組內(nèi)求最大值;你使用的是min()函數(shù),就會(huì)進(jìn)行組內(nèi)求最小值。

2.group by關(guān)鍵字語法詳解

有些小白在學(xué)習(xí)MySQL的過程中,很多都是在group by關(guān)鍵字這個(gè)地方卡殼。于是我希望自己能夠用白話圖文的方式,讓你真正搞明白這個(gè)關(guān)鍵字的含義。

在這里插入圖片描述

group by是用于分組查詢的關(guān)鍵字,一般是配合sum(),avg(),count(),max(),min()聚合函數(shù)使用的。也就是說SQL語句中只要有group by,那么在select后面的展示字段中一般會(huì)有聚合函數(shù)(5個(gè)聚合函數(shù))中的一個(gè)或多個(gè)函數(shù)出現(xiàn)。觀察上圖,有一點(diǎn)你需要記住,你用表中的字段A進(jìn)行分組后,一般就需要對(duì)表中的其它字段,使用聚合函數(shù),這樣意義更大,而不是還對(duì)字段A使用聚合函數(shù),沒啥太大意義。

我們?cè)偎伎枷旅孢@個(gè)問題!

當(dāng)SQL語句中使用了group by后,在select后面一定有一個(gè)字段使用了聚合函數(shù)(5個(gè)聚合函數(shù))。但是除了這個(gè)聚合函數(shù),select后面還可以添加其他什么字段嗎?

答案肯定是可以的!但是該字段有一定的限制,并不是什么字段都可以。也就是說,當(dāng)SQL語句中使用了group by關(guān)鍵字后,select后面除了聚合函數(shù),就只能是group by后面出現(xiàn)的字段。也就是圖中的字段A,select后面只能存在group by后面的字段。

3.一個(gè)簡(jiǎn)單的分組查詢的案例

案例 :按照部門編號(hào)deptno分組,統(tǒng)計(jì)每個(gè)部門的平均工資。

select 
    deptno,avg(sal) avgs
from 
    emp
group by 
    deptno

結(jié)果如下:

在這里插入圖片描述

4.分組前篩選和分組后篩選

這個(gè)知識(shí)點(diǎn)就是要帶著大家理解一下,什么使用該用where篩選?什么時(shí)候該用having篩選?這個(gè)知識(shí)點(diǎn)對(duì)于學(xué)習(xí)MySQL的小白來說,也是一個(gè)棘手的事兒。不用擔(dān)心,跟著黃同學(xué)學(xué)MySQL,沒有學(xué)不會(huì)的。

1)原始表和結(jié)果集的概念

原始表指的是數(shù)據(jù)庫中真正存在的那個(gè)表,使用【select * from 表名】查詢出來的就是原始表信息。結(jié)果集指的是在SQL語句中,添加其它任何一個(gè)限制條件,最終展示給我們表,都是結(jié)果集。添加不同的限制條件,查詢出來的結(jié)果集也是不同的。原始表只有一個(gè),結(jié)果集卻是各種各樣的。

2)黃同學(xué)支大招

只要是需求中,涉及到聚合函數(shù)做條件的情況,一定是分組后的篩選。能用分組前篩選的,就優(yōu)先考慮分組前的篩選。(考慮到性能問題)

在這里插入圖片描述 

3)案例講解

原始數(shù)據(jù)集如下:

在這里插入圖片描述

① 分組前篩選

習(xí)題一:查詢姓名中包含S字符的,每個(gè)部門的工資之和。

在這里插入圖片描述

習(xí)題二:查詢工資大于2000的,不同部門的平均工資。

在這里插入圖片描述

② 分組后篩選

習(xí)題一:查詢部門員工個(gè)數(shù)大于3的部門編號(hào)和員工個(gè)數(shù)。

在這里插入圖片描述

習(xí)題二:查詢每個(gè)部門最高工資大于3000的部門編號(hào)和最高工資。

在這里插入圖片描述

③ 分組前篩選和分組后篩選合用

習(xí)題:查詢1981年入職的,不同部門間工資的平均值大于2000的部門編號(hào)和平均值。

在這里插入圖片描述

5.分組查詢(按函數(shù)分組)

習(xí)題:按員工姓名的長(zhǎng)度分組,查詢每一組的員工個(gè)數(shù),篩選員工個(gè)數(shù)>3的有哪些?

select length(ename) len,count(*) counts
from emp
group by len
having counts > 3;

結(jié)果如下:

在這里插入圖片描述

6.分組查詢(按多個(gè)字段分組)

習(xí)題:查詢每個(gè)部門每個(gè)工種的員工的平均工資。

在這里插入圖片描述

7.group by和order by,一對(duì)老搭檔

習(xí)題一:查詢每個(gè)部門的員工的平均工資,按照平均工資降序。

在這里插入圖片描述

習(xí)題二:查詢每個(gè)部門的員工的平均工資,按照平均工資升序。

在這里插入圖片描述

8.分組查詢的總結(jié)

1)分組函數(shù)做條件,肯定是放在having子句中。

2)能用分組前篩選的,就優(yōu)先考慮使用分組前篩選。(where篩選)

3)group by子句支持單個(gè)字段分組,多個(gè)字段分組(多個(gè)字段之間用逗號(hào)隔開沒有順序要求),還支持函數(shù)分組(用的較少)。

以上就是MySQL初學(xué)者可以告別分組聚合查詢的困擾了的詳細(xì)內(nèi)容,更多關(guān)于MySQL分組聚合查詢的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)

    MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)

    這篇文章主要介紹了MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 解決hibernate+mysql寫入數(shù)據(jù)庫亂碼

    解決hibernate+mysql寫入數(shù)據(jù)庫亂碼

    初次沒習(xí)hibernate,其中遇到問題在網(wǎng)上找的答案與大家共同分享!
    2009-07-07
  • 關(guān)于MySQL日期類型的選擇建議

    關(guān)于MySQL日期類型的選擇建議

    在軟件開發(fā)中,時(shí)間記錄是不可或缺的功能,如記錄操作時(shí)間、交易時(shí)間等,通常不建議使用字符串存儲(chǔ)日期,因?yàn)樗加每臻g大,并且效率低下,MySQL提供的Datetime和Timestamp是常用的時(shí)間存儲(chǔ)類型,Datetime沒有時(shí)區(qū)信息,而Timestamp與時(shí)區(qū)有關(guān)
    2024-10-10
  • SQL實(shí)現(xiàn)LeetCode(178.分?jǐn)?shù)排行)

    SQL實(shí)現(xiàn)LeetCode(178.分?jǐn)?shù)排行)

    這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(178.分?jǐn)?shù)排行),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解如何在MySQL中自動(dòng)生成和更新時(shí)間戳

    詳解如何在MySQL中自動(dòng)生成和更新時(shí)間戳

    在數(shù)據(jù)庫設(shè)計(jì)中,時(shí)間戳字段(如 create_time 和 update_time)是非常常見的需求,它們通常用于記錄數(shù)據(jù)的創(chuàng)建時(shí)間和最后更新時(shí)間,以便于數(shù)據(jù)追蹤和分析,本文將深入探討如何在 MySQL 中設(shè)置自動(dòng)生成和更新時(shí)間戳字段,需要的朋友可以參考下
    2025-02-02
  • MySQL的InnoDB引擎入門學(xué)習(xí)教程

    MySQL的InnoDB引擎入門學(xué)習(xí)教程

    這篇文章主要介紹了MySQL的InnoDB引擎入門學(xué)習(xí)教程,對(duì)InnoDB的存儲(chǔ)結(jié)構(gòu)有一個(gè)較好的總結(jié),需要的朋友可以參考下
    2015-11-11
  • MYSQL 性能分析器 EXPLAIN 用法實(shí)例分析

    MYSQL 性能分析器 EXPLAIN 用法實(shí)例分析

    這篇文章主要介紹了MYSQL 性能分析器 EXPLAIN 用法,結(jié)合實(shí)例形式分析了MYSQL 性能分析器 EXPLAIN 基本功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • 19個(gè)MySQL性能優(yōu)化要點(diǎn)解析

    19個(gè)MySQL性能優(yōu)化要點(diǎn)解析

    這篇文章主要介紹了19個(gè)MySQL性能優(yōu)化要點(diǎn),并對(duì)其都進(jìn)行了深入解析,感興趣的小伙伴們可以參考一下
    2015-08-08
  • MySQL之存在則更新,否則就插入數(shù)據(jù)

    MySQL之存在則更新,否則就插入數(shù)據(jù)

    這篇文章主要介紹了MySQL之存在則更新,否則就插入數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySQL如何使用使用Xtrabackup進(jìn)行備份和恢復(fù)

    MySQL如何使用使用Xtrabackup進(jìn)行備份和恢復(fù)

    Xtrabackup是由Percona開發(fā)的一個(gè)開源軟件,可實(shí)現(xiàn)對(duì)InnoDB的數(shù)據(jù)備份,支持在線熱備份(備份時(shí)不影響數(shù)據(jù)讀寫)。本文講解如何使用該工具進(jìn)行備份和恢復(fù)
    2021-06-06

最新評(píng)論

梅河口市| 英吉沙县| 汨罗市| 湛江市| 德钦县| 隆化县| 霍林郭勒市| 东阿县| 荆门市| 雷州市| 团风县| 景德镇市| 津市市| 遂昌县| 兴安盟| 肥乡县| 永济市| 皮山县| 巧家县| 兴仁县| 成武县| 沭阳县| 叶城县| 双牌县| 农安县| 德钦县| 安陆市| 洮南市| 永胜县| 陈巴尔虎旗| 瓦房店市| 佛坪县| 建阳市| 同德县| 舞钢市| 哈巴河县| 黎平县| 黄山市| 河津市| 吉安县| 科尔|