mysql之group by和having用法詳解
GROUP BY語(yǔ)法可以根據(jù)給定數(shù)據(jù)列的每個(gè)成員對(duì)查詢(xún)結(jié)果進(jìn)行分組統(tǒng)計(jì),最終得到一個(gè)分組匯總表。
select子句中的列名必須為分組列或列函數(shù),列函數(shù)對(duì)于group by子句定義的每個(gè)組返回一個(gè)結(jié)果。
某個(gè)員工信息表結(jié)構(gòu)和數(shù)據(jù)如下:
id name dept salary edlevel hiredate 1 張三 開(kāi)發(fā)部 2000 3 2009-10-11 2 李四 開(kāi)發(fā)部 2500 3 2009-10-01 3 王五 設(shè)計(jì)部 2600 5 2010-10-02 4 王六 設(shè)計(jì)部 2300 4 2010-10-03 5 馬七 設(shè)計(jì)部 2100 4 2010-10-06 6 趙八 銷(xiāo)售部 3000 5 2010-10-05 7 錢(qián)九 銷(xiāo)售部 3100 7 2010-10-07 8 孫十 銷(xiāo)售部 3500 7 2010-10-06
我想列出每個(gè)部門(mén)最高薪水的結(jié)果,sql語(yǔ)句如下:
select dept , max(salary) AS MAXIMUM FROM STAFF GROUP BY DEPT
查詢(xún)結(jié)果如下:
dept MAXIMUM 開(kāi)發(fā)部 4500 設(shè)計(jì)部 2600 銷(xiāo)售部 3500
解釋一下這個(gè)結(jié)果:
1、 滿(mǎn)足“SELECT子句中的列名必須為分組列或列函數(shù)”,因?yàn)镾ELECT有g(shù)roup by中包含的列dept;
2、“列函數(shù)對(duì)于group by子句定義的每個(gè)組各返回一個(gè)結(jié)果”,根據(jù)部門(mén)分組,對(duì)每個(gè)部門(mén)返回一個(gè)結(jié)果,就是每個(gè)部門(mén)的最高薪水。
將where子句與group by子句一起使用
分組查詢(xún)可以在形成組和計(jì)算列函數(shù)之前具有消除非限定行的標(biāo)準(zhǔn)where子句。必須在group by子句之前指定where子句
例如,查詢(xún)公司2010年入職的各個(gè)部門(mén)每個(gè)級(jí)別里的最高薪水
SELECT dept,edlevel,MAX(salary) AS MAXIMUM FROM STAFF WHERE hiredate > '2010-01-01' GROUP BY dept,edlevel
查詢(xún)結(jié)果如下:
dept edlevel MAXIMUM 設(shè)計(jì)部 4 2300 設(shè)計(jì)部 5 2600 銷(xiāo)售部 5 3000 銷(xiāo)售部 7 3500
在SELECT語(yǔ)句中指定的每個(gè)列名也在GROUP BY子句中提到,未在這兩個(gè)地方提到的列名將產(chǎn)生錯(cuò)誤。GROUP BY子句對(duì)dept和edlevel的每個(gè)唯一組合各返回一行。
GROUP BY子句之后使用Having子句
可應(yīng)用限定條件進(jìn)行分組,以便系統(tǒng)僅對(duì)滿(mǎn)足條件的組返回結(jié)果。因此,在GROUP BY子句后面包含了一個(gè)HAVING子句。HAVING類(lèi)似于WHERE(唯一的差別是WHERE過(guò)濾行,HAVING過(guò)濾組)AVING支持所有WHERE操作符。
例如,查找雇員數(shù)超過(guò)2個(gè)的部門(mén)的最高和最低薪水:
SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM FROM STAFF GROUP BY dept HAVING COUNT(*) > 2 ORDER BY dept
查詢(xún)結(jié)果如下:
dept MAXIMUM MINIMUM 設(shè)計(jì)部 2600 2100 銷(xiāo)售部 3500 3000
例如,查找雇員平均工資大于3000的部門(mén)的最高薪水和最低薪水:
SELECT dept,MAX(salary) AS MAXIMUM,MIN(salary) AS MINIMUM FROM STAFF GROUP BY dept HAVING AVG(salary) > 3000 ORDER BY dept
查詢(xún)結(jié)果如下:
dept MAXIMUM MINIMUM 銷(xiāo)售部 3500 3000
到此這篇關(guān)于mysql之group by和having用法詳解的文章就介紹到這了,更多相關(guān)mysql之group by和having內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql中json類(lèi)型數(shù)據(jù)查詢(xún)問(wèn)題
這篇文章主要介紹了Mysql中json類(lèi)型數(shù)據(jù)查詢(xún)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
MYSQL讀寫(xiě)性能測(cè)試的簡(jiǎn)單記錄
本文主要介紹了MYSQL讀寫(xiě)性能測(cè)試的簡(jiǎn)單記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
MySql樹(shù)形結(jié)構(gòu)(多級(jí)菜單)查詢(xún)?cè)O(shè)計(jì)方案
本文主要介紹了MySql樹(shù)形結(jié)構(gòu)(多級(jí)菜單)查詢(xún)?cè)O(shè)計(jì)方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
Mybatis動(dòng)態(tài)傳入order?by問(wèn)題
這篇文章主要介紹了Mybatis動(dòng)態(tài)傳入order?by問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12

