group by 語法在數(shù)據(jù)查詢和統(tǒng)計(jì)方面我們經(jīng)常要用到,例如:要統(tǒng)計(jì)每個(gè)用戶對(duì)產(chǎn)品評(píng)論數(shù)量,工資傭金,業(yè)績等統(tǒng)計(jì)中都要按某個(gè)進(jìn)行分組統(tǒng)講,下面向大家介紹GROUP BY語法.
group by語法可以根據(jù)給定數(shù)據(jù)列的每個(gè)成員對(duì)查詢結(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 張三 開發(fā)部 2000 3 2009-10-11
2 李四 開發(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 趙八 銷售部 3000 5 2010-10-05
7 錢九 銷售部 3100 7 2010-10-07
8 孫十 銷售部 3500 7 2010-10-06
例如,我想列出每個(gè)部門最高薪水的結(jié)果,sql語句如下:
SELECT DEPT, MAX(SALARY) AS MAXIMUM FROM STAFF GROUP BY DEPT
查詢結(jié)果如下:
DEPT MAXIMUM
開發(fā)部 2500
設(shè)計(jì)部 2600
銷售部 3500
解釋一下這個(gè)結(jié)果:
1、滿足“SELECT子句中的列名必須為分組列或列函數(shù)”,因?yàn)镾ELECT有GROUP BY DEPT中包含的列DEPT。
2、“列函數(shù)對(duì)于GROUP BY子句定義的每個(gè)組各返回一個(gè)結(jié)果”,根據(jù)部門分組,對(duì)每個(gè)部門返回一個(gè)結(jié)果,就是每個(gè)部門的最高薪水。
注意:計(jì)算的是每個(gè)部門(由 GROUP BY 子句定義的組)而不是整個(gè)公司的 MAX(SALARY)。
例如,查詢每個(gè)部門的總的薪水?dāng)?shù)
SELECT DEPT, sum( SALARY ) AS total
FROM STAFF
GROUP BY DEPT
查詢結(jié)果如下:
DEPT total
開發(fā)部 4500
設(shè)計(jì)部 7000
銷售部 9600
將 WHERE 子句與 GROUP BY 子句一起使用分組查詢可以在形成組和計(jì)算列函數(shù)之前具有消除非限定行的標(biāo)準(zhǔn) WHERE 子句。必須在GROUP BY 子句之前指定 WHERE 子句。
例如,查詢公司2010年入職的各個(gè)部門每個(gè)級(jí)別里的最高薪水
SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM
FROM staff
WHERE HIREDATE > '2010-01-01'
GROUP BY DEPT, EDLEVEL
ORDER BY DEPT, EDLEVEL
查詢結(jié)果如下:
DEPT EDLEVEL MAXIMUM
設(shè)計(jì)部 4 2300
設(shè)計(jì)部 5 2600
銷售部 5 3000
銷售部 7 3500
注意:在SELECT語句中指定的每個(gè)列名也在GROUP BY子句中提到。未在這兩個(gè)地方提到的列名將產(chǎn)生錯(cuò)誤。
GROUP BY子句對(duì)DEPT和EDLEVEL的每個(gè)唯一組合各返回一行。 在GROUP BY子句之后使用HAVING子句可應(yīng)用限定條件進(jìn)行分組,以便系統(tǒng)僅對(duì)滿足條件的組返回結(jié)果。為此,在GROUP BY子句后面包含一個(gè)HAVING子句。HAVING子句可包含一個(gè)或多個(gè)用AND和OR連接的謂詞。每個(gè)謂詞將組特性(如AVG(SALARY))與下列之一進(jìn)行比較:
例如:尋找雇員數(shù)超過2個(gè)的部門的最高和最低薪水:
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è)計(jì)部 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
希望本文對(duì)廣大站長或從事企業(yè)網(wǎng)站建設(shè)公司的團(tuán)隊(duì)有所幫助,如對(duì)此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高興與廣大站長和從事企業(yè)網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗(yàn)。