mysql分組查詢(總結)


分組查詢

/*

語法:

 

select 查詢列表

from 表

【where 篩選條件】

group by 分組的字段

【order by 排序的字段】;

 

特點:

1、和分組函數一同查詢的字段必須是group by后出現的字段

2、篩選分為兩類:分組前篩選和分組后篩選

     針對的表       位置        連接的關鍵字

分組前篩選 原始表     group by前         where


分組后篩選 group by后的結果集    group by后         having

 

問題1:分組函數做篩選能不能放在where后面

答:不能

問題2:where——group by——having

一般來講,能用分組前篩選的,盡量使用分組前篩選,提高效率

3、分組可以按單個字段也可以按多個字段

4、可以搭配着排序使用

*/

 

#引入:查詢每個部門的員工個數

SELECT COUNT(*) FROM employees WHERE department_id=90;

 

#1.簡單的分組

 

#案例1:查詢每個工種的員工平均工資

SELECT AVG(salary),job_id

FROM employees

GROUP BY job_id;

 

#案例2:查詢每個位置的部門個數

SELECT COUNT(*),location_id

FROM departments

GROUP BY location_id;

 

 

#2、可以實現分組前的篩選

 

#案例1:查詢郵箱中包含a字符的 每個部門的最高工資

SELECT MAX(salary),department_id

FROM employees

WHERE email LIKE '%a%'

GROUP BY department_id;

 

#案例2:查詢有獎金的每個領導手下員工的平均工資

SELECT AVG(salary),manager_id

FROM employees

WHERE commission_pct IS NOT NULL

GROUP BY manager_id;

 

#3、分組后篩選

 

#案例:查詢哪個部門的員工個數>5

#①查詢每個部門的員工個數

SELECT COUNT(*),department_id

FROM employees

GROUP BY department_id;

 

#② 篩選剛才①結果

 

SELECT COUNT(*),department_id

FROM employees

GROUP BY department_id

HAVING COUNT(*)>5;

 

#案例2:每個工種有獎金的員工的最高工資>12000的工種編號和最高工資

 

SELECT job_id,MAX(salary)

FROM employees

WHERE commission_pct IS NOT NULL

GROUP BY job_id

HAVING MAX(salary)>12000;

 

#案例3:領導編號>102的每個領導手下的最低工資大於5000的領導編號和最低工資manager_id>102

 

SELECT manager_id,MIN(salary)

FROM employees

GROUP BY manager_id

HAVING MIN(salary)>5000;

 

#4.添加排序

 

#案例:每個工種有獎金的員工的最高工資>6000的工種編號和最高工資,按最高工資升序

 

SELECT job_id,MAX(salary) m

FROM employees

WHERE commission_pct IS NOT NULL

GROUP BY job_id

HAVING m>6000

ORDER BY m ;

 

#5.按多個字段分組

 

#案例:查詢每個工種每個部門的最低工資,並按最低工資降序

SELECT MIN(salary),job_id,department_id

FROM employees

GROUP BY department_id,job_id

ORDER BY MIN(salary) DESC;


免責聲明!

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



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