【20-27】分组函数
2022-02-10 21:32:00
# MySQL
概述
count 计数
sum 求和
avg 平均
max 最大值
min 最小值
分组函数:多行处理函数,输入多行输出一行
求总和/最高/最低/平均工资
1 | mysql> select sum(sal) from emp; |
求总人数
1 | mysql> select count(*) from emp; |
多行处理函数自动忽略NULL
1 | mysql> select count(comm) from emp; |
数学表达式中有NULL出现结果为NULL
1 | mysql> select ename, (sal+comm)*12 as yearsal from emp; |
ifnull()空处理函数
将 null 做为 0 处理
1 | ifnull(null, 0) |
1 | mysql> select ename, (sal+ifnull(comm,0))*12 as yearsal from emp; |
count(*)和count(某个字段)的区别
- count(*) 计算总记录条数
- count(某个字段) 计算该字段不为NULL的个数
group by 和 having
- group by: 按照某些字段进行分组
- having: 对分组后的数据进行再次过滤
- 当sql语句无group by那么整张表自成一组
- group by在where之后执行
格式
1 | select 5 |
找出每个工作岗位最高薪资
1 | mysql> select job, max(sal) from emp group by job; |
找出高于平均工资的员工
运用子查询
1 | mysql> select ename, sal from emp where sal > (select avg(sal) from emp); |
找出每个部门不同工作岗位的最高薪资
1 | mysql> select deptno, job, max(sal) from emp group by deptno,job order by deptno asc; |
找出每个部门的最高薪资,要求显示薪资大于2900的数据
1 | mysql> select deptno, max(sal) from emp group by deptno having max(sal) > 2900; |
找出每个部门的平均薪资,要求显示薪资大于2000的数据
1 | mysql> select deptno, avg(sal) from emp group by deptno; |
总结DQL执行顺序
1 | select xxx 5 |
关于查询结果去重
distinct 关键字
1 | mysql> select distinct job from emp; |
distinct 关键字必须在所有字段最前面
1 | mysql> select distinct job,deptno from emp order by deptno asc; |
统计岗位数量
1 | mysql> select count(distinct job) from emp; |