黑猴子的家:mysql 分组查询

1、分组查询总结

语法:
select 分组函数 别名,分组后的字段
from 表
【where 分组前筛选】
group by 分组的字段
【having 分组后筛选】
【order by 排序的东西】
特点:
1、按多个字段分组,字段间用逗号隔开,没有顺序要求
2、可以分组函数一起查询的字段只能是分组后的字段
3、分组筛选
            针对的表            位置            使用的关键字
分组前筛选   原始表          group by的前面       where
分组后筛选   分组后的结果集   group by的后面       having
顺序:where -> group by -> having  
4、having和group by支持别名

2、引入:查询各部门的最高工资

SELECT MAX(salary) FROM employees WHERE department_id IN(20,90,30);
SELECT MAX(salary) FROM employees GROUP BY  department_id;

3、普通的分组查询

案例:查询各部门的最高工资和部门号

SELECT MAX(salary),department_id FROM employees GROUP BY  department_id;

4、按多个字段分组

案例:查询每个工种、每个部门的平均工资

SELECT AVG(salary),job_id,department_id
FROM employees
GROUP BY job_id,department_id;

5、分组加筛选总结

/*
筛选条件分两类:
分组前筛选:筛选的条件针对的是原始表
分组后筛选:筛选的条件针对的是分组后的结果集
            针对的表            位置            使用的关键字
分组前筛选   原始表          group by的前面       where
分组后筛选   分组后的结果集   group by的后面       having
where -> group by -> having
*/

6、查询有奖金的,每个部门的最高奖金率

SELECT MAX(commission_pct) 最高奖金率,department_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY department_id;

7、查询员工姓名中包含字符a,每个部门的最低工资高于3000的部门编号

SELECT department_id,MIN(salary) 最低工资
FROM employees
WHERE last_name LIKE '%a%'  
GROUP BY department_id
HAVING MIN(salary)>3000;

8、查询电话以“110”开头的,工种号包含字符'T'的每个工种的平均工资>5000的工种号和平均工资

SELECT job_id,AVG(salary)
FROM employees
WHERE phone_number LIKE '110%' AND job_id LIKE '%T%'
GROUP BY job_id
HAVING AVG(salary)>5000;

9、查询每个位置的部门个数大于2的部门个数和位置号

SELECT COUNT(*) 个数,location_id
FROM departments
GROUP BY location_id
HAVING COUNT(*)>2;

10、havign子句支持别名

案例:查询每个位置的部门个数大于2的部门个数和位置号

SELECT COUNT(*) 个数,location_id 
FROM departments
GROUP BY location_id
HAVING 个数>2;

11、排序

SELECT department_id,MIN(salary) 最低工资
FROM employees
WHERE last_name LIKE '%a%'  
GROUP BY department_id
HAVING MIN(salary)>3000
ORDER BY 最低工资 DESC;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值