学习内容
组函数
函数
分类 | 作用 |
---|---|
单值函数 | 对一个值、或者一个列进行操作,返回一个结果 |
分组函数 | 先分组,然后对每一组进行操作,每一组数据操作后分别得到一个结果 |
分组函数
组函数(分组函数),是指将数据按照某列的值进行分组后,然后使用组函数分别对每个分好的小组中的数据进行处理。所以组函数一般要结合着分组关键字group来使用。
统计分析(分组主要为了统计)
-
分组 group by…
-
函数 avg…
-
筛选(与where类似) having…
-
组函数:
avg求平均值
count 计算有多少条数据
max 最大值
min 最小值
sum 求和不常用:
stddev 标准差
variance 方差 -
语句执行顺序
where–>group by分组–>执行组函数–>having筛选->order by -
组函数可以出现的位置:
1) select后面
2) having后面
3) order by后面
4) where后面一定【不能】出现组函数(因为where执行时组函数还未执行) -
where与having最大的区别:(与静态非静态很像)
where后面拿不到组函数执行结果,having可以。
注意:如果select/having语句后面出现了组函数,那么select/having后面没有被组函数修饰的列,就必须出现在group by 后面。
where和having对比
- where和having都是做条件筛选的
- where执行的时间比having要早
- where后面不能出现组函数
- having后面可以出现组函数
- where语句要紧跟from后面
- having语句要紧跟group by后面
group by和having的关系(与if else很像)
- group by可以单独存在,后面可以不出现having语句
- having不能单独存在,有需要的话,必须出现在group by后面
order by语句
- 如果sql语句中需要排序,那么就一定要写在sql语句的最后面
- order by后也可以出现组函数
使用分组函数
不结合group分组使用
注:如果不使用group分组的话,那么默认当前查询到的所有数据是一组。
avg():查询s_emp表中所有员工的平均工资
select avg(salary)
from s_emp;
count():查询s_emp表中共有多少条数据
select count(*)
from s_emp;
max():查询s_emp表中所有员工中的最大工资
select max(salary)
from s_emp;
min():查询s_emp表中所有员工中的最小工资
select min(salary)
from s_emp;
sum():查询s_emp表中所有员工的工资总和
select sum(salary)
from s_emp;
stddev():查询s_emp表中所有员工的工资的标准差
select stddev(salary)
from s_emp;
variance():查询s_emp表中所有员工的工资的方差
select variance(salary)
from s_emp;
结合group分组使用
avg():查询s_emp表中每个部门的平均工资
select dept_id,avg(salary)
from s_emp
group by dept_id;
排序:
max():查询s_emp表中每个部门员工的最高工资
select dept_id,max(salary)
from s_emp
group by dept_id;
sum():查询s_emp表中每个部门员工的工资总和
select dept_id,sum(salary)
from s_emp
group