希望按照自己的一些要求,将每一个小组的信息进行统计分析,比如公司有很多部门,想统计每个部门完成自己任务的情况,就可以用分组查询,先把部门分组,然后统计各个人员完成任务的情况。
语法说明
语法
SELECT 分组函数,列(出现在group by后面)
FROM 表格
【WHENE 筛选条件0】
GROUP BY 分组的列表
【ORDER BY 字句】
查询列表必须特殊,要求为分组函数和GROUP BY后出现的字段。group by 接后面通过所要的内容
案例1,每个部门的最高工资
SELECT MAX(salary),department_id
FROM AS
GROUP BY apartment_id;
可以理解为,根据每个组,也就是apartment,选出当前组内条件为薪水最高的人的薪水数字,返回是薪水和部门信息
案例2;每个部门坐位包含21的的工位个数,select填写的永远是需要返回的数值,其他的数值可以添加
SELECT COUNT(*) ,location_id
FROM AS
WHERE set_num LIKE '&21&'
GROUP BY location_id;
接下来添加比较复杂的筛选条件
1.查询哪些部门的个数大于2
思考:查询每个部门的员工个数。根据上面结果进行查询,查询哪些部门的人员个数大于2。
SELECT count(*),department_id
FROM AS
GROUP BY department_id;
以上就筛选出所有部门员工的个数,逐个语句筛选,第一个是提取总数,和部门编号,按照部门筛选。
紧接着,从表中计算大于2的个数。
SELECT count(*),department_id
FROM AS
GROUP BY department_id
HAVING COUNT(*) >2;
对于这个代码筛选来说,如何判断语句是关键
2.查询每个工种的最高工资>1000,的工种编号和最高工资
SELECT MAX(salary),manager_id
FROM AS
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;
汉字筛选版
SELECT 最大薪水,职位
FROM 表
WHERE 奖金非空
GROUP BY 职位;
分组查询的条件,分选前查询,分组后查询。
就看查询的数据源是原始表还是分组后的表
分组函数做条件,肯定是放在having里面。
总结:group by支持多个和单个查询
order by 放在最后面。