MySQL group by 用法解析

  GROUP BY語法能夠根據給定數據列的每一個成員對查詢結果進行分組統計,最終獲得一個分組彙總表。SELECT子句中的列名必須爲分組列或列函數。列函數對於GROUP BY子句定義的每一個組各返回一個結果。php

某個員工信息表結構和數據以下:sql

 
 
  1. id  name  dept  salary  edlevel  hiredateide

  2. 1張三開發部200032009-10-11函數

  3. 2李四開發部250032009-10-01spa

  4. 3王五設計部260052010-10-02設計

  5. 4王六設計部230042010-10-03code

  6. 5馬七設計部210042010-10-06blog

  7. 6趙八銷售部300052010-10-05開發

  8. 7錢九銷售部310072010-10-07博客

  9. 8孫十銷售部350072010-10-06

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

 
 
  1. SELECT DEPT, MAX(SALARY) AS MAXIMUM

  2. FROM STAFF

  3. GROUP BY DEPT

查詢結果以下:

 
 
  1. DEPT  MAXIMUM

  2. 開發部2500

  3. 設計部2600

  4. 銷售部3500

解釋一下這個結果:
一、知足「SELECT子句中的列名必須爲分組列或列函數」,由於SELECT有GROUP BY DEPT中包含的列DEPT。
二、「列函數對於GROUP BY子句定義的每一個組各返回一個結果」,根據部門分組,對每一個部門返回一個結果,就是每一個部門的最高薪水。
注意:計算的是每一個部門(由 GROUP BY 子句定義的組)而不是整個公司的 MAX(SALARY)。
例如,查詢每一個部門的總的薪水數:

 
 
  1. SELECT DEPT, SUM( SALARY ) AS total

  2. FROM STAFF

  3. GROUP BY DEPT

查詢結果以下:

 
 
  1. DEPT  total

  2. 開發部4500

  3. 設計部7000

  4. 銷售部9600

將 WHERE 子句與 GROUP BY 子句一塊兒使用
分組查詢能夠在造成組和計算列函數以前具備消除非限定行的標準 WHERE 子句。必須在GROUP BY 子句以前指定 WHERE 子句。
例如,查詢公司2010年入職的各個部門每一個級別裏的最高薪水

 
 
  1. SELECT DEPT, EDLEVEL, MAX( SALARY ) AS MAXIMUM

  2. FROM staff

  3. WHERE HIREDATE >2010-01-01

  4. GROUP BY DEPT, EDLEVEL

  5. ORDER BY DEPT, EDLEVEL

查詢結果以下:

 
 
  1. //天涯PHP博客 http://blog.phpha.com

  2. DEPT  EDLEVEL  MAXIMUM

  3. 設計部42300

  4. 設計部52600

  5. 銷售部53000

  6. 銷售部73500

注意:在SELECT語句中指定的每一個列名也在GROUP BY子句中提到。未在這兩個地方提到的列名將產生錯誤。

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

 
 
  1. SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM

  2. FROM staff

  3. GROUP BY DEPT

  4. HAVING COUNT(*)>2

  5. ORDER BY DEPT

查詢結果以下:

 
 
  1. DEPT  MAXIMUM  MINIMUM

  2. 設計部26002100

  3. 銷售部35003000

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

 
 
  1. SELECT DEPT, MAX( SALARY ) AS MAXIMUM, MIN( SALARY ) AS MINIMUM

  2. FROM staff

  3. GROUP BY DEPT

  4. HAVING AVG( SALARY )>3000

  5. ORDER BY DEPT

查詢結果以下:

 
 
  1. DEPT  MAXIMUM  MINIMUM

  2. 銷售部35003000

相關文章
相關標籤/搜索