1、<窗口函数> over ( partition by <分组的列名> )
当聚合函数没使用 order by 时,聚合函数按分区全部数值计算
2、<窗口函数> over ( partition by <分组的列名> order by <排序的列名>)
当聚合函数同时使用 partition by 和 order by 时,聚合函数按分区逐行叠加计算
order by 按排序规则累加计算
以牛客SQL143为例:
表exam_record
每份每份试卷每月作答数:count( )over(partition by )
类似于使用 group by 后,对每个分区进行一次 count 计算,同一个分区下每一行都做了相同的计算(故这里用了distinct去重)
截止当月作答总数:count( )over(partition by order by )
类似于对当前行及之前的数据进行聚合计算,适合统计一些累计值 (像递归集合)
补充:使用over子句与聚合函数 (聚合窗口函数),分组效率比group by 更高