MySQL 基础语法--分组查询(GROUP BY,WHERE和HAVING的使用方法)

 希望按照自己的一些要求,将每一个小组的信息进行统计分析,比如公司有很多部门,想统计每个部门完成自己任务的情况,就可以用分组查询,先把部门分组,然后统计各个人员完成任务的情况。

语法说明

语法
     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 放在最后面。

你可能感兴趣的:(SQL学习,sql)