手把手教MySQL查询:语法、案例、真题 (5. 分组查询)

5. 分组查询

1. 语法
	select 分组函数,列名(要求出现在group by的后面)
	from 表
	【where 分组前的筛选条件】
	group by 分组列表
	【having 分组后的筛选条件】
	
	注意:
		* group by、having后面是支持别名的
		* 能用分组前筛选也能用分组后筛选的,建议用where筛选
		* group by 支持单个字段分组、多个字段分组(多个字段用逗号分隔,没有前后顺序),也支持按分组函数和表达式分组
		* 可以添加排序,排序是放在整个分组查询的最后的,排序作用于分组查询的结果集
		* group by, order by 后面跟数字,指的是 select 后面选择的列(属性),1 代表第一个列(属性),依次类推。
	
2. where和having
    having放在group by之后,是先分组后过滤,可以用分组函数,having作用于临时表/结果集,支持别名
    where放在group by之前,是先过滤后分组,不可以用分组函数,where作用于原表,不支持别名

3. 案例
	-- 查询每个工种的最高工资
	select max(salary),job_id from employees group by job_id;
	-- 查询每个位置上的部门个数
	select count(*),location_id from departments group by location_id;
	-- 查询邮箱中包含a字符的每个部门的平均工资
	select avg(salary),department_id from employees where email like '%a%' group by department_id;
    -- 查询有奖金的每个领导手下员工的最高工资
    select max(salary),manager_id from employees where commission_pct is not null group by manager_id;
    -- 查询哪个部门的员工个数大于2
    select department_id,count(*) from employees group by department_id having count(*)>2;
	-- 按员工姓名的长度分组,查询每一组员工的个数,筛选员工个数大于5的有哪些
    select count(*),length(last_name) from employees group by length(last_name) having count(*)>5;
    -- 查询每个部门每个工种员工的平均工资
    select avg(salary),department_id,job_id from employees group by department_id,job_id;
    select avg(salary),department_id,job_id from employees group by job_id,department_id;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值