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