Mysql分组函数以及分组查询

分组函数

功能:用作统计使用,又称为聚合函数或统计函数或组函数

分类:

sum 求和函数

select sum(属性名)求出该属性的数值和 

只能求数值的

avg 求平均值

select sum(属性名)求出该属性的平均值

只能求数值的

max 求最大值

select sum(属性名)求出该属性的最大值

可以求字符串的最大值

min 求最小值

select sum(属性名)求出该属性的最小值

可以求字符串的最小值

count 计算个数

select sum(属性名)求出该属性的个数

 

特点:

1.

sum、avg一般用于处理数值型

max、min、count可以处理任何类型

2.

sum、avg、count、max、min中null不参与运算

3.可以和distinct关键字搭配使用

在去除重复的列后再进行运算

如 select sum(distinct,salary)

4.count 函数

count(属性) 求salary的行数

count(*) 求总行数(只要一行里有某个属性列不为空,则总行数加1)

也可以用count(1)来统计行数,类似于在表里加了一个属性名为1的列,然后统级它的个数

两者的效率:

myisam存储引擎下,count(*)效率高

innodb存储引擎下,两者差不多

5.和分组函数一同查询的字段有限制

 

分组查询

先看一下分组查询的语法结构

select 分组函数
from table
where 筛选条件
group by 分组的列表
order by 子句

基本的分组查询

例如查询每个工种的最高工资

select max(salary),job_id
form employees
group by job_id;

查询每个部门的人数

select count(*),location_id
from employees
group by location_id;

添加筛选条件

查询邮箱中包含a字符的,每个部门的平均工资

select avg(salary),location_id
from employees
where email like "%a%"
group by location_id;

 

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

select max(salary),admin_id
from employees
where commission_pct is not null
group by admin_id;

添加复杂的筛选条件

查询哪个部门的员工数>2

select count(*),department_id
from employees
group by department id
having count(*)>2

使用having语句,因为where实在group前面实现的,此时还不知道每个部门的员工数,所以不能加在where里。

查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资

select job_id,max(salary)
from employees
where commission_pct is not null
group by job_id
having max(salary)>12000;

查询领导编号>102的每个领导手下最低工资>5000的领导编号是哪个,以及最低工资

select manager_id,min(salary)
from employees
where manager_id>102
group by manager_id
having min(salary)>5000;

筛选总结:

筛选分为分组前筛选和分组后筛选,分组前筛选用where,分组后筛选用having

 

按函数或表达式分组

按员工姓名的长度分组,查询每一组员工的个数,筛选员工个数>5的有哪些

select length(work_name),count(*)
from employees
group by length(work_name)
having count(*)>5;

按多个字段分组,多个字段用逗号隔开

查询每个部门每个工种的员工的平均工资

select avg(salary),department_id,job_id
from employees
group by department_id,job_id;//只有department_id和job_id 一样的时候才分组

添加排序

查询每个部门每个工种的员工的平均工资,并按平均工资的高低显示

select avg(salary),department_id,job_id
from employees
group by department_id,job_id
order by avg(salary)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值