MySQL Group By 實例講解(一)


MySQL Group By 實例講解

group by語法可以根據給定數據列的每個成員對查詢結果進行分組統計,最終得到一個分組匯總表。
SELECT子句中的列名必須為分組列或列函數。列函數對於GROUP BY子句定義的每個組各返回一個結果。
某個員工信息表 STAFF 結構和數據如下:

例如,我想列出每個部門最高薪水的結果,sql語句如下:

SELECT DEPT, MAX(SALARY) AS MAXIMUM
FROM STAFF
GROUP BY DEPT

查詢結果如下:

解釋一下這個結果:
1、滿足“SELECT子句中的列名必須為分組列或列函數”,因為SELECT有GROUP BY DEPT中包含的列DEPT。
2、“列函數對於GROUP BY子句定義的每個組各返回一個結果”,根據部門分組,對每個部門返回一個結果,由於MAX(SALARY) 就是每個部門的最高薪水

如下圖:

注意:計算的是每個部門(由 GROUP BY 子句定義的組)而不是整個公司的 MAX(SALARY)。


例如,查詢每個部門的總的薪水數

SELECT DEPT, sum( SALARY ) AS total
FROM STAFF
GROUP BY DEPT

查詢結果如下:

 
        

將 WHERE 子句與 GROUP BY 子句一起使用
分組查詢可以在形成組和計算列函數之前具有消除非限定行的標准 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

查詢結果如下:

注意:在SELECT語句中指定的每個列名也在GROUP BY子句中提到。未在這兩個地方提到的列名將產生錯誤。
GROUP BY子句對DEPT和EDLEVEL的每個唯一組合各返回一行


在GROUP BY子句之后使用HAVING子句
可應用限定條件進行分組,以便系統僅對滿足條件的組返回結果。為此,在GROUP BY子句后面包含一個HAVING子句。HAVING子句可包含一個或多個用AND和OR連接的謂詞。每個謂詞將組特性(如AVG(SALARY))與下列之一進行比較:
例如:尋找雇員數超過2個的部門的最高和最低薪水:

SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING COUNT( * ) >2
ORDER BY DEPT

查詢結果如下:

 

例如:尋找雇員平均工資大於3000的部門的最高和最低薪水:

SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM
FROM staff
GROUP BY DEPT
HAVING AVG( SALARY ) >3000
ORDER BY DEPT

查詢結果如下:

 

 

 

原文地址http://www.manongjc.com/mysql/mysql_group_by.html









































































例如:尋找雇員平均工資大於3000的部門的最高和最低薪水:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM