最近学习了sql server的四个窗口函数,特此记录下。
over语句的优点是,能够再返回基本列的同时,能在同一行对他们聚合。
平时row_number用的比较多,结合partiton 和order by使用,在外层再嵌套一个select ,where rownumber=1可以做到按照时间倒序排列只取最新值的效果。
row_number给每个数据一个行号,不会出现并列行号的情况。
这样就能达到我前面说的去重的效果。partition by里可以写多个列,用法类似group by。但是group by每组只会返回一行数据,而partition by会和基本列一起返回。
rank() over(order by sales) 如果有2个并列第一,序号都会显示为一,但是下一个的序号会从三开始。
dense_rank() over(order by sales)如果有两个并列第一,序号会显示为一,下一个的序号从二开始。序号是连贯的。
rank表示之前有多少行数据,dense_rank表示之前有多少个数据(包括重复,重复的算一个数据)
rank列的9 表示前面有8行数据,dense_rank的9表示前面有8个数据(包括重复)
rank() 表示第n行之前有n-1行数据。desse_rank()表示第n行之前有n-1种数据
Ntile函数把行分类,Ntile(10)表示把所有数据分为10组,但如果不能整除,余数将放到开头的每个组。
假设有102行,分为5组,那么就是前两组是21行。