GROUP BY語法可以根據(jù)給定數(shù)據(jù)列的每個成員對查詢結(jié)果進行分組統(tǒng)計,最終得到一個分組匯總表。
select子句中的列名必須為分組列或列函數(shù),列函數(shù)對于group by子句定義的每個組返回一個結(jié)果。
某個員工信息表結(jié)構(gòu)和數(shù)據(jù)如下:
id name dept salary edlevel hiredate
1 張三 開發(fā)部 2000 3 2009-10-11
2 李四 開發(fā)部 2500 3 2009-10-01
3 王五 設(shè)計部 2600 5 2010-10-02
4 王六 設(shè)計部 2300 4 2010-10-03
5 馬七 設(shè)計部 2100 4 2010-10-06
6 趙八 銷售部 3000 5 2010-10-05
7 錢九 銷售部 3100 7 2010-10-07
8 孫十 銷售部 3500 7 2010-10-06
我想列出每個部門最高薪水的結(jié)果,sql語句如下:
select dept , max(salary) AS MAXIMUM
FROM STAFF
GROUP BY DEPT
查詢結(jié)果如下:
dept MAXIMUM
開發(fā)部 4500
設(shè)計部 2600
銷售部 3500
解釋一下這個結(jié)果:
1、 滿足“SELECT子句中的列名必須為分組列或列函數(shù)”,因為SELECT有g(shù)roup by中包含的列dept;
2、“列函數(shù)對于group by子句定義的每個組各返回一個結(jié)果”,根據(jù)部門分組,對每個部門返回一個結(jié)果,就是每個部門的最高薪水。
將where子句與group by子句一起使用
分組查詢可以在形成組和計算列函數(shù)之前具有消除非限定行的標準where子句。必須在group by子句之前指定where子句
例如,查詢公司2010年入職的各個部門每個級別里的最高薪水
SELECT dept,edlevel,MAX(salary) AS MAXIMUM
FROM STAFF
WHERE hiredate > '2010-01-01'
GROUP BY dept,edlevel
查詢結(jié)果如下:
dept edlevel MAXIMUM
設(shè)計部 4 2300
設(shè)計部 5 2600
銷售部 5 3000
銷售部 7 3500
在SELECT語句中指定的每個列名也在GROUP BY子句中提到,未在這兩個地方提到的列名將產(chǎn)生錯誤。GROUP BY子句對dept和edlevel的每個唯一組合各返回一行。
GROUP BY子句之后使用Having子句
可應(yīng)用限定條件進行分組,以便系統(tǒng)僅對滿足條件的組返回結(jié)果。因此,在GROUP BY子句后面包含了一個HAVING子句。HAVING類似于WHERE(唯一的差別是WHERE過濾行,HAVING過濾組)AVING支持所有WHERE操作符。
例如,查找雇員數(shù)超過2個的部門的最高和最低薪水:
SELECT dept ,MAX(salary) AS MAXIMUM ,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING COUNT(*) > 2
ORDER BY dept
查詢結(jié)果如下:
dept MAXIMUM MINIMUM
設(shè)計部 2600 2100
銷售部 3500 3000
例如,查找雇員平均工資大于3000的部門的最高薪水和最低薪水:
SELECT dept,MAX(salary) AS MAXIMUM,MIN(salary) AS MINIMUM
FROM STAFF
GROUP BY dept
HAVING AVG(salary) > 3000
ORDER BY dept
查詢結(jié)果如下:
dept MAXIMUM MINIMUM
銷售部 3500 3000
到此這篇關(guān)于mysql之group by和having用法詳解的文章就介紹到這了,更多相關(guān)mysql之group by和having內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Mysql row number()排序函數(shù)的用法和注意
- MySQL隱式類型轉(zhuǎn)換導(dǎo)致索引失效的解決
- 淺談MySQL數(shù)據(jù)查詢太多會OOM嗎
- Django搭建MySQL主從實現(xiàn)讀寫分離
- MySQL多表連接查詢詳解
- 一篇文章帶你了解MySQL數(shù)據(jù)庫基礎(chǔ)
- springboot后端配置多個數(shù)據(jù)源、Mysql數(shù)據(jù)庫的便捷方法
- MySQL DEFINER具體使用詳解
- MYSQL row_number()與over()函數(shù)用法詳解