[size=large][b]rank()、dense_rank():[/b][/size]
根据col0分组,col1正序排序
例子:假设排序后的值为1,3,3,8,10
rank返回的值为1,2,2,4,5
dense_rank返回的值为1,2,2,3,4
[size=large][b]lag(),lead():[/b][/size]
[size=large][b]ntile(num)[/b][/size]
我的理解是它会把分组后的数据每组都分成num份,然后给每份数据赋予1到num之间的数值(不知是否正确)
比如partition by col0后某组数据有20个,如果是ntile(5),那么第1到第4条数据值是1,5-8条数据值是2,依次类推
[size=large][b]聚合函数配合rows between [from] preceding and [to] following (如:sum)[/b][/size]
比如有如下table
col0 col1 col2
1 1 1
1 2 1
1 3 2
2 1 2
2 2 3
则结果为:
col0 col1 total
1 1 2
1 2 4
1 3 3
2 1 5
2 2 5
rank() over(partition by col0 order by col1)
dense_rank() over(partition by col0 order by col1)
根据col0分组,col1正序排序
例子:假设排序后的值为1,3,3,8,10
rank返回的值为1,2,2,4,5
dense_rank返回的值为1,2,2,3,4
[size=large][b]lag(),lead():[/b][/size]
lag(col1,2) over(partition by col0 order by col1) 分组排序后向上两行col1的值
lead(col1,1) over(partition by col0 order by col1)分组排序后向下两行col1的值
[size=large][b]ntile(num)[/b][/size]
我的理解是它会把分组后的数据每组都分成num份,然后给每份数据赋予1到num之间的数值(不知是否正确)
比如partition by col0后某组数据有20个,如果是ntile(5),那么第1到第4条数据值是1,5-8条数据值是2,依次类推
[size=large][b]聚合函数配合rows between [from] preceding and [to] following (如:sum)[/b][/size]
select col0,col1,sum(col2) over(partition by col0 order by col1 rows between 1 preceding and 1 following) total from table 此例中total值是根据col0分组对col1排序后上一行到下一行总共3行col2列值得总和
比如有如下table
col0 col1 col2
1 1 1
1 2 1
1 3 2
2 1 2
2 2 3
则结果为:
col0 col1 total
1 1 2
1 2 4
1 3 3
2 1 5
2 2 5