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

MySQL學(xué)習(xí)之分組查詢(xún)的用法詳解

 更新時(shí)間:2022年07月28日 08:39:41   作者:不渴望力量的哈士奇  
這篇文章主要為大家詳細(xì)介紹一下MySQL中分組查詢(xún)的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)MySQL有一定幫助,需要的可以參考一下

該章節(jié)來(lái)開(kāi)始學(xué)習(xí)分組查詢(xún),上一章節(jié)我們學(xué)習(xí)了聚合函數(shù),默認(rèn)統(tǒng)計(jì)的是全表范圍內(nèi)的數(shù)據(jù),配合上 WHERE 就能夠縮小統(tǒng)計(jì)的范圍了。但是這并不能滿(mǎn)足我們的要求,比如說(shuō)我們按照之前的數(shù)據(jù)表查詢(xún)每個(gè)部門(mén)的平均底薪是多少?這樣的記錄就需要針對(duì)部門(mén)編號(hào)進(jìn)行分組了。根據(jù)分組的情況統(tǒng)計(jì)分組內(nèi)的最大值、最小值、平均值等等。如此就能夠滿(mǎn)足剛剛提到的 “查詢(xún)每個(gè)部門(mén)的平均底薪” 這樣的需求了,另外,“分組查詢(xún)” 是 SQL 中很重要的一個(gè)語(yǔ)法,大家一定要好好掌握它。

為什么要分組

上面也提到,聚合函數(shù)默認(rèn)是對(duì)全表范圍內(nèi)的數(shù)據(jù)做統(tǒng)計(jì),在一些特定的場(chǎng)景下不太適用,就比如 對(duì)數(shù)據(jù)分別進(jìn)行統(tǒng)計(jì)的 場(chǎng)景。

由于聚合函數(shù)的這樣的局限性,也就產(chǎn)生了分組的概念,于是就有了分組的語(yǔ)法。

分組的語(yǔ)法是通過(guò) “GROUP BY” 來(lái)實(shí)現(xiàn)的。

"GROUP BY" 子句的作用是通過(guò)一定的規(guī)則將一個(gè)數(shù)據(jù)集劃分成若干個(gè)小的區(qū)域,然后再針對(duì)每個(gè)小區(qū)域分別進(jìn)行數(shù)據(jù)匯總處理

分組語(yǔ)句演示案例:(計(jì)算每一個(gè)部門(mén)的平均底薪)

SELECT deptno, AVG(sal) 
FROM t_emp
GROUP BY deptno;

-- 利用 GROUP BY 子句將 deptno 進(jìn)行分組,在利用 AVG() 聚合函數(shù)計(jì)算各個(gè) deptno(部門(mén)) 的平均月薪 

這里的小數(shù),可能看著不太舒服,我們可以使用 ROUND() 函數(shù)將 平均工資四舍五入變成整數(shù)。

SELECT deptno, ROUND(AVG(sal))
FROM t_emp
GROUP BY deptno;

逐級(jí)分組

有的時(shí)候僅有大的分組還不夠,還需要在大的分組里面劃分出曉得分組,然后再執(zhí)行統(tǒng)計(jì)計(jì)算,于是就有了逐級(jí)分組。

什么是逐級(jí)分組? MySQL 數(shù)據(jù)庫(kù)支持多列分組條件,執(zhí)行的時(shí)候按照多列去依次執(zhí)行,這就是逐級(jí)分組。

示例如下:(查詢(xún)每個(gè)部門(mén)里,每種職位的人員數(shù)量和平均工資。)

SELECT deptno, job, COUNT(*), AVG(sal)
FROM t_emp
GROUP BY deptno, job
ORDER BY deptno;

-- 首先要按照部門(mén)對(duì)員工進(jìn)行分組,在部門(mén)里,還要按照職務(wù)去分組; 就是 "GROUP BY deptno, job"
-- 然后再用 聚合函數(shù)的 AVG 計(jì)算平均的月薪; 就是 "SELECT deptno, job, COUNT(*), AVG(sal)"
-- 最后按照 deptno(部門(mén)編號(hào)) 排序,使用 ORDER BY 進(jìn)行升序排序。

逐級(jí)分組對(duì) SELECT 子句的要求

查詢(xún)語(yǔ)句中如果包含有 “GROUP BY” 子句,那么 “SELECT” 子句中的內(nèi)容就必須要遵守以下規(guī)定
"SELECT" 子句中可以包含聚合函數(shù),或者 "GROUP BY" 子句的分組列,其余內(nèi)容均不可以出現(xiàn)在 "SELECT" 子句中
SQL 示例如下:(遵守規(guī)定示例)

SELECT deptno, COUNT(*), AVG(sal)
FROM t_emp
GROUP BY deptno;

SQL 示例如下:(不遵守規(guī)定示例)

SELECT deptno, COUNT(*), AVG(sal), sal
FROM t_emp
GROUP BY deptno;

-- 這條語(yǔ)句是無(wú)法執(zhí)行成功的,因?yàn)樵?"SELECT" 子句中,有一個(gè) "sal" 的字段
-- 這個(gè) "sal" 字段 沒(méi)有在 GROUP BY 中去分組,本身也沒(méi)有聚合函數(shù),就是一個(gè)普通的字段

-- 造成無(wú)法執(zhí)行、報(bào)錯(cuò)的原因是因?yàn)椋?SELECT deptno, COUNT(*), AVG(sal), sal" 
-- 中的 "deptno、COUNT(*)、AVG(sal)" 返回的是 "GROUP BY" 一個(gè)結(jié)果集分組的同級(jí)信息;
-- 而 "sal" 字段又是多條匹配記錄,前后肯定是匹配不上的,所以這個(gè) SQL 語(yǔ)句是無(wú)法執(zhí)行成功的。

-- 同時(shí)因?yàn)闃?biāo)準(zhǔn)的 SQL 規(guī)定,對(duì)表進(jìn)行聚合查詢(xún)的時(shí)候,只能在 SELECT 子句中寫(xiě)下面 3 種內(nèi)容:
-- 通過(guò) GROUP BY 子句指定的聚合鍵、聚合函數(shù)(SUM 、AVG 等)、常量。
-- 所以在使用 SQL 語(yǔ)句記性數(shù)據(jù)表查詢(xún)時(shí),一定要嚴(yán)格遵守 SQL 的語(yǔ)法規(guī)定。

對(duì)分組結(jié)果集再次做匯總計(jì)算

來(lái)看一個(gè)示例:(查詢(xún) 員工表中各個(gè)部門(mén)的人數(shù),各個(gè)部門(mén)的平均月薪、最大月薪、最小月薪、按照員工號(hào)進(jìn)行排序,并針對(duì)各個(gè)部門(mén)再次做一個(gè)匯總統(tǒng)計(jì)。)

SELECT deptno, COUNT(*), AVG(sal), MAX(sal), MIN(sal)
FROM t_emp
GROUP BY deptno
WITH ROLLUP;

-- 這里的 "WITH ROLLUP" 子句就是針對(duì) "deptno"分組的結(jié)果集,再一次的進(jìn)行匯總計(jì)算

PS:該 SQL 語(yǔ)句主要是為了體現(xiàn) "WITH ROLLUP" 關(guān)鍵字的效果,是對(duì)聚合函數(shù)的再次執(zhí)行匯總計(jì)算。

GROUP_CONCAT 函數(shù)

上文中的 "逐級(jí)分組對(duì) SELECT 子句的要求" 部分的時(shí)候解釋了為什么會(huì)有這樣的要求,就是聚合函數(shù)返回一條記錄的結(jié)果與非分組字段的多條記錄的結(jié)果無(wú)法匹配。

如果想要想要匹配,那就要把非分組的字段的多條記錄轉(zhuǎn)換成一條記錄,MySQL 提供的 GROUP_CONCAT 函數(shù)就可以將分組查詢(xún)中的非分組字段中的多條記錄合并成一條記錄。

SQL 語(yǔ)句 "GROUP_CONCAT" 示例如下:(查詢(xún)每個(gè)部門(mén)內(nèi)底薪超過(guò) 2000元的人數(shù)和員工姓名,這里的員工姓名就是非分組的字段)

SELECT deptno, GROUP_CONCAT(ename), AVG(sal),COUNT(*)
FROM t_emp
WHERE sal >= 2000
GROUP BY deptno;

-- 查詢(xún)員工表,篩選條件為月薪大于等于 2000 ,以 "deptno" 為分組
-- "ename" 字段沒(méi)有分組,但是我們使用 "GROUP_CONCAT" 函數(shù)將 "ename" 的多條返回記錄轉(zhuǎn)換為一條記錄

GROUP BY 子句的執(zhí)行順序

截止到目前為止,我們所學(xué)習(xí)的所有子句,執(zhí)行順序如下:

FROM ---> WHERE ---> GROUP BY ---> SELECT ---> ORDER BY ---> LIMIT

到此這篇關(guān)于MySQL學(xué)習(xí)之分組查詢(xún)的用法詳解的文章就介紹到這了,更多相關(guān)MySQL分組查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)

    一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)

    MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫(kù)更新的一致性呢?那就是MySQL XA,本文就來(lái)介紹一下MySQL XA如何實(shí)現(xiàn)分布式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-11-11
  • 通過(guò)實(shí)例分析MySQL中的四種事務(wù)隔離級(jí)別

    通過(guò)實(shí)例分析MySQL中的四種事務(wù)隔離級(jí)別

    SQL標(biāo)準(zhǔn)定義了4種隔離級(jí)別,包括了一些具體規(guī)則,用來(lái)限定事務(wù)內(nèi)外的哪些改變是可見(jiàn)的,哪些是不可見(jiàn)的。下面這篇文章通過(guò)實(shí)例詳細(xì)的給大家分析了關(guān)于MySQL中的四種事務(wù)隔離級(jí)別的相關(guān)資料,需要的朋友可以參考下。
    2017-08-08
  • Linux下安裝MySQL5.7.19問(wèn)題小結(jié)

    Linux下安裝MySQL5.7.19問(wèn)題小結(jié)

    第一次在自己虛機(jī)上安裝mysql 中間碰到很多問(wèn)題 在這里記下來(lái),特此分享到腳本之家平臺(tái)供大家參考
    2017-08-08
  • 詳解MySQL單實(shí)例和多實(shí)例啟動(dòng)腳本

    詳解MySQL單實(shí)例和多實(shí)例啟動(dòng)腳本

    這篇文章主要介紹了MySQL單實(shí)例和多實(shí)例啟動(dòng)腳本,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • mysql技巧之select count的區(qū)別分析

    mysql技巧之select count的區(qū)別分析

    在工作過(guò)程中,時(shí)不時(shí)會(huì)有開(kāi)發(fā)咨詢(xún)幾種select count()的區(qū)別,我總會(huì)告訴他們使用select count(*) 就好。下文我會(huì)展示幾種sql的執(zhí)行計(jì)劃來(lái)說(shuō)明為啥是這樣。
    2013-08-08
  • 解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法

    解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法

    這篇文章主要介紹了解決MySQL主從數(shù)據(jù)庫(kù)沒(méi)有同步的兩種方法,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09
  • mysql 重要日志文件匯總

    mysql 重要日志文件匯總

    這篇文章主要介紹了mysql 重要日志文件的匯總,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2020-11-11
  • Mysql連接join查詢(xún)?cè)碇R(shí)點(diǎn)

    Mysql連接join查詢(xún)?cè)碇R(shí)點(diǎn)

    在本文里我們給大家整理了一篇關(guān)于Mysql連接join查詢(xún)?cè)碇R(shí)點(diǎn)文章,對(duì)此感興趣的朋友們可以學(xué)習(xí)下。
    2019-02-02
  • Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程

    Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程

    這篇文章主要為大家分享了Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • mysql8新特性之binlog_expire_logs_seconds淺析

    mysql8新特性之binlog_expire_logs_seconds淺析

    MySQL8中新增了不少新特性,這些特性提高了數(shù)據(jù)庫(kù)的安全性和性能,使數(shù)據(jù)庫(kù)管理員能夠更靈活地進(jìn)行賬戶(hù)管理工作,下面這篇文章主要給大家介紹了關(guān)于mysql8新特性之binlog_expire_logs_seconds的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評(píng)論

昌平区| 南丰县| 盐城市| 阜新市| 泊头市| 太仆寺旗| 望谟县| 正宁县| 平乐县| 新巴尔虎右旗| 平武县| 佛冈县| 苗栗市| 万年县| 香河县| 铅山县| 吴旗县| 龙泉市| 绥德县| 云安县| 改则县| 即墨市| 敦煌市| 武定县| 金湖县| 嘉定区| 乌拉特前旗| 曲水县| 名山县| 清水河县| 远安县| 广安市| 阿克| 咸阳市| 临城县| 邢台市| 和静县| 石门县| 抚远县| 玛曲县| 平顶山市|