sql中不仅仅有聚合函数,还有开窗函数。然而在使用聚合函数的时候必须要对数据进行group by分组,否则聚合函数无法执行,但是有时候当不希望对整体数据进行分组而又想达到一些分组才能够实现的效果时候,开窗函数就提供了这样的操作。
在常用的开窗函数中,有RANK()、DENSE_RANK()、ROW_NUMBER()这三个,尤其是在对连续日期计算的时候效果最佳,但是这三者是有些许的区别的。
RANK()
占位排序,相等的值排名相同,但若有相等的值,则序号从1到n不连续。如果有两个人都排在第3名,则没有第4名。
DENSE_RANK()
不占位排序,对相等的值排名相同,但序号从1到n连续。如果有两个人都排在第一名,则排在第2名(假设仅有1个第二名)的人是第3个人
ROW_NUMBER()
不占位排序,对相等的值不进行区分,其实就是行号,相等的值对应的排名不同,序号从1到n连续。
为了更好的理解这三者的区别,我在数据中同时使用这三个函数帮助理解。