Mysql分组查询函数DQL(六)

分组函数(聚合函数或统计函数)

sum求和, avg求平均数, max求最大值, min求最小值, count求个数web

简单的使用sql

select sum(salary) from employee;
select avg(salary) from employee;
select max(salary) from employee;
select min(salary) from employee;
select count(salary) from employee;
select sum(salary),avg(salary) 平均值,max(salary) 最大值,min(salary) 最小值,count(salary) 总数 from employee;

参数支持哪些类型svg

sum和avg通常处理的是数值类型的,而max,min,count能够处理任何类型
以上的分组函数都会忽略null值函数

count的详细介绍spa

select count (*) from employee;//统计个数
select count(1) from employee;

和分组函数一同查询的字段要求是group by 后的字段code

计算入职的最大入职时间与最小值入职时间的相差天数xml

select datediff(max(rdate),min(rdate)) from employee;

简单的分组查询

查询每一个工种的最高工资
 select  max(salary),job_id from employee group by job_id

添加筛选条件 分组前的筛选
查询邮箱中包含a字符的,每一个部门的平均工资token

select avg(salary),departid from employee where email like '%a%' group by departid

查询有奖金的每一个领导手下员工的最高工资string

select max(salary),managerid from employee where commision is not null group by managerid

添加复杂的筛选条件 分组后的筛选
案例一:查询哪一个部门的员工的个数大于2it

查询每一个部门的员工个数

select count(*),departid from employee group by departid having count(*)>2

根据上述结果进行筛选查询哪一个部门的员工大于2

案例二:查询每一个工种有奖金的员工的最高工资大于12000的工种编号和最高工资

select max(salary),job_id from employee where commission is not null  group by job_id  having max(salary)>12000

案例三:查询领导编号>102的每一个领导手下的最低工资>5000的领导编号是哪一个,以及其最低工资

select managerid,min(salary) from employee where managerid>102 group by managerid having min(salary)>5000

按照表达式或者函数进行分组

案例一:按照员工的姓名长度进行分组,查询每一组的员工个数,筛选员工个数>5的有哪些?

select length(last_name),count(*) from employee group by length(last_name) having count(*)>5

按照多个字段进行分组
案例:查询每一个部门每一个工种的员工的平均工资

select avg(salary),depaerid,job_id from employee group by depaerid,job_id

分组查询中的条件分为两类,一类为分组前进行筛选 group by 子句的前面加上where 另外一类为分组后的筛选,group by子句后面加上having关键字

练习

1.查询各个管理者手下员工的最低工资,其中最低工资不能低于6000,没有管理者的员工不计算在内

select managerid,min(salary) from employee where managerid is not null group by managerid having min(salary)>=6000

2.查询具备各个job_id员工人数

select count(*) from employee where job_id is not null group by job_id