连续聚合是对数据按一定顺序(通常是时间顺序)进行聚合。
有三种连续聚合的情况:
累计聚合(Cumulative Aggregate )
滑动聚合(Sliding Aggregate)
年初至今(Year-to- Date)
累计聚合是对序列(通常是时间顺序)内从第一个元素到当前元素的数据进行聚合运算。
计算一个聚合时可以使用子查询,计算多个聚合时使用联接。
常见问题:计算每个雇员从开始有订单操作以来到该月份处理过的订单总量和每月平均量
因为有两个聚合(订单总量、每月平均量),要使用联接
select o1.orderid,
o1.orederMonth,
o1.qty,
sum(o2.qty) as totalqty,
avg(o2.qty) as avgqty
from orderdeatil as o1
join orderdetail as o2
on o1.orderid =o2.orderid and o2.orderMonth<=o1.ordermonth
group by o1.orderid ,o1.ordermonth,o1.qty
order by o1.orderid ,o1.ordermonth;
如果还有过滤条件,要使用having子句。
比如:求累计总量达到1000之前的每月聚合值
补充:where和having都是过滤数据;
where后面跟的是属性(列),不能跟聚合函数;
having后面可以跟聚合函数(基本上都是),但聚合的列不一定是group by 后面的列。也有情况不是聚合函数,但后面的列必须是group by后面的列