下面补充两点:
- 说明:首先group by name进行name去重,然后count over进行统计人数。牵涉到sql语句的执行顺序。
- 它跟select name, count(*) … group by name还是不一样的,因为over并不需要和group by一起使用。
select
name
,orderdate
,cost
,sum(cost) over(partition by name order by orderdate range between unbounded preceding and current row) s3
from temp
- 说明:当order by后面的窗口范围缺失时,默认是range,range是逻辑窗口,如同s3所示,要注意order by key的key的值是重复的情况
- 这里的key是orderdate,并在orderdate上进行range操作,当orderdate是2017-01-01时,orderdate的值在[-inf, 2017-01-01]的行都包含在内,故前两行的sum(cost) = 10 + 46 = 56