分组函数: 用作统计使用,又称为聚合函数或统计函数
分类: sum求和、 avg 平均值、 max最大值 、min最小值、 count计算个数
特点:
sum 、avg 一般用于处理数值型
max 、 min、count可以处理任何类型
可以和distinct 搭配实现去重的运算
select sum(distinct salary),sum(salary) from employees;
4,count函数
详细介绍:
select count(salary) from employees;
select count(*) from employes; #统计行数 *和常量等价 select count(1) from employees 的返回结果一样
myisam 存储引擎下 count(*)的效率高
innodb 。。。。xia count(*)和count(1)的效率差不多 ,比count(字段)效率要高,因为要查一下字段 ,会在表前面加一列
6,和分组函数一同查询的字段有限制
和分组函数一同查询的字段要求是group by后的字段
select avg(salary),employees_id from employess 不行-》因为表格不规范
7, 分组查询
特点:
分类:分组前筛选和分组后筛选
分组前筛选:原始表 位置放在group by子句的前面 关键字where
分组后筛选:分组后的结果集 位置放在group by子句的后面 关键字having
分组函数做条件肯定放在having子句中
能用分组前筛选的,前后都有的以分组前为标总,比如Null
案例:查询每个部门的平均工资
select avg(salary),job_id from employees group by job_id;
select 分组函数 ,列(要出现在group by的后面) from 表 【where 筛选条件
group by 分组的列表】
【order by子句】
注意:查询列表必须特殊,要求是分组函数和group by后出现的字段
anli:查询每个工种的最高工资
select max(salary), job_id from employees group by job_id;
案例:添加分组前的筛选条件
查询邮箱中包含a字符的,每个部门的平均工资
select avg(salary) ,department_id from employees where email like "a" group by department_id
案例2 :查询有奖金的每个领导手下员工的最高工资
select max(salary), manager_id from employer where commission_pct is not null group by manage _id;
添加分组后的复杂的筛选条件
案例:查询哪个部门的员工个数>2
第一步:先查询每个部门的员工数
select count(*),department_id from employees group by department_id;
第二步:根据1的结果进行筛选,查询哪个部门的员工个数>2
select count(*),department_od from employees group by department_id having count(*) >2 ,分组完了再统计查询
案例:查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
第一步:查询每个工种有奖金的员工的最高工资
select max(salary),job_id from employees group by job_id
第二个:根据1的结果再选,是否大于12000
select max(salary),job_id from employes where commission_pct is not null groupby job_id having (salary) >120000
查询领导编号>102的每个领导手下最低工资>5000的领导编号是哪个,以及其最低工资
select min(salary),manager_id from employees where manager_id >102 group by manager_id having min(salary) >5000;
按表达式分组或函数分组
案例:按员工姓名的长度分组,查询每一组员工个数,筛选员工个数>5的有哪些
select count(*),length(last_name) len_name from employees group bu length(last_name) having count(*) >5;
按多个字段分组
案例:查询每个部门每个工种的员工的平均工资
select avg(salary),department_id , jod_id from employees group by department_id ,job_id ;
添加排序
案例:查询每个部门每个工种的员工的平均工资按平均工资的高低显示出来
select avg(salary),department_id , jod_id from employees where department_id is not null group by department_id ,job_id having salary >10000 order by avg(salary) desc;
简单使用:
select sum(salary) from employees;
select avg(salary) from employees;
select amx(salary) from employees;
select min(salary) from employees;
select count(salary) from employees;
也可以放一起
select sum(salary),avg(salary),max(salary),min(salary),count(salary) from employees;
参数支持哪些类型
select sum(last_name) ,avg(last_name) from employees; 虽然不报错,但是不对,名字怎么求和
标签:salary,group,函数,employees,分组,MySQL,id,select From: https://www.cnblogs.com/dalaomysblogs/p/15126251.html