--从(无边界)第一行到当前行进行累加select score,sum(score)over(orderby score rowsbetweenunboundedprecedingandcurrentrow)as s from tmp;--从前2行到当前行进行累加select score,sum(score)over(orderby score rowsbetween2precedingandcurrentrow)as s from tmp;--前2行+当前行+后面所有行进行累加select score,sum(score)over(orderby score rowsbetween2precedingandunboundedfollowing)as s from tmp;--当前行到后一行进行累加select score,sum(score)over(orderby score rowsbetweencurrentrowand1following)as s from tmp;--第一行到当前行进行累加,如果当前行的值和后一行的值相同的话,当前行的累加结果取的是后一行的累加结果(和当前行相同score值的所有行都会包含进去)select score,sum(score)over(orderby score)as s from tmp;
range between
range between...and...按照列值限制窗口的大小
--比如当前行score的值为200,窗口分区内score值满足200-100 到 200+200,(100-400)这个范围的所有值进行累加sum(score)over(orderby score range between100precedingand200following)
--score值满足当前行score值+1条件的所有行累加select score,sum(score)over(orderby score range betweencurrentrowand1following)as s from tmp;
create table tmp( name string, class tinyint, cooperator_name string, score tinyint)row format delimited fields terminated by '|';adf|3|测试公司1|45asdf|3|测试公司2|55cfe|2|测试公司2|743dd|3|测试公司5|nfda|1|测试公司7|80gds|2|测试公司9|92ffd|1|测试公司10|95dss