SQL分组查询案例
總結
語法
select 查詢列表
from 表
【where 篩選條件】
group by 分組的字段
having 分組后篩選
【order by 排序的字段】;
執行順序
特點
| 分組前篩選 | 原始表 | group by前 | where |
| 分組后篩選 | group by后的結果集 | group by后 | having |
表的結構
數據文件參見:
myemployees.sql文件
1. 簡單的分組
案例1:查詢每個工種的員工平均工資
SELECT job_id, AVG(salary) FROM employees GROUP BY job_id案例2:查詢每個位置的部門個數
SELECT COUNT(*),manager_id from employees WHERE manager_id is not null GROUP BY manager_id2、可以實現分組前的篩選
案例1:查詢郵箱中包含a字符的 每個部門的最高工資
SELECT MAX(salary) as 最高工資,department_id FROM employees where email like "%a%" GROUP BY department_id案例2:查詢有獎金的每個領導手下員工的平均工資
SELECT AVG(salary) as 平均工資,manager_id from employees where commission_pct is not null GROUP BY manager_id3、分組后篩選
案例:查詢哪個部門的員工個數>5
#①查詢每個部門的員工個數 #② 篩選剛才①結果 SELECT department_id,COUNT(*) as "員工個數" FROM employees GROUP BY department_id HAVING count(*)>5注意是先找出每個部門的員工個數,再篩選出大于5的。所以是分組后篩選,要用HAVING(而不是WHERE),放在GROUP BY 的后面
案例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的領導編號和最低工資
select manager_id, min(salary) FROM employees WHERE manager_id>102 GROUP BY manager_id having min(salary)>50004.添加排序
案例:每個工種有獎金的員工的最高工資>6000的工種編號和最高工資,按最高工資升序
SELECT job_id,MAX(salary) FROM employees WHERE commission_pct is not null GROUP BY job_id HAVING MAX(salary)>6000 ORDER BY MAX(salary) ASC5.按多個字段分組
案例:查詢每個工種每個部門的最低工資,并按最低工資降序
SELECT job_id,department_id, MIN(salary) from employees GROUP BY job_id,department_id ORDER BY MIN(salary) DESC 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: SQL基础练习
- 下一篇: linux cmake编译源码,linu