第六课 分组查询

  • 语法:
SELECT 分组函数,列(要求出现在GROUP BY子句之后)
FROM 表名
【WHERE 筛选条件】
GROUP BY 分组列表
【ORDER BY 子句】
【HAVING 子句(分组后筛选)】
  • 分组查询中的筛选条件分为两类
数据源位置关键字
分组前筛选原始表GROUP BY子句之前WHERE
分组后筛选分组后的结果集GROUP BY子句之后HAVING

注:
1. 分组函数作为条件,肯定放在HAVING子句中
2. 能用分组前筛选的,优先考虑分组前筛选,提高性能

  • GROUP BY子句支持单个字段分组及多个字段分组(多个字段之间用逗号隔开没有顺序),也支持表达式或函数(使用较少)
  • 可以添加排序(ORDER BY)放在整个查询最后
# 1 查询每个工种的最高工资
SELECT MAX(emp.salary),emp.job_id FROM employees emp GROUP BY emp.job_id;

# 2 查询每个位置上的部门个数
SELECT COUNT(*),dep.location_id FROM departments dep GROUP BY dep.location_id;

# 3 查询邮箱中包含a字符的,每个部门的平均工资
SELECT AVG(emp.salary),emp.department_id,emp.email
FROM employees emp
WHERE emp.email LIKE '%a%'
GROUP BY emp.department_id;

# 4 查询有奖金的每个领导手下员工的最高工资
SELECT MAX(emp.salary),emp.manager_id
FROM employees emp
WHERE emp.commission_pct IS NOT NULL
GROUP BY emp.manager_id;

# 5 查询哪个部门的员工个数 > 2(分组后筛选)
SELECT COUNT(*) AS empNum,emp.department_id
FROM employees emp 
GROUP BY emp.department_id
HAVING empNum > 2;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值