【编程学习】SQL窗口函数一览

over里面怎么写?

先写partition by col1,代表着我们在进行窗口函数计算时,先将数据按照col1列进行分组,与SQL的DQL语言中的group by一样。

其次,order by col2,代表着我们在进行窗口函数计算时,先将数据按照col2列进行排序,这对我们在进行排名类的操作时至关重要,同样的,与SQL的DQL语言中的order by一样。

最后是选取范围,要用到rows between …… and …… 关键字,从其英文含义上就很容易理解他的使用方式。具体的可选参数有以下几个:

  • unbounded preceding 前面所有行
  • unbounded following 后面所有行
  • current row 当前行
  • n following 后面n行
  • n preceding 前面n行

这几个参数可以根据你的需要进行组合,应该很容易理解。简单来说,就是将窗口函数的参数范围限制在了有限的行中,实现滚动窗口的左右。

排序类

在窗口内进行排序。

row_number() over()

rank() over()

dense_rank() over()

ntile(n) over()

假设现在有一组有序数据:98 96 94 94 90 83 80 80 75 59,各个函数的输出结果如下:

原始数列 98 96 94 94 90 83 80 80 75 59
row_number() over() 1 2 3 4 5 6 7 8 9 10
rank() over() 1 2 3 3 5 6 7 7 9 10
dense_rank() over() 1 2 3 3 4 5 6 6 7 8
ntile(2) over() 1 1 1 1 1 2 2 2 2 2
ntile(5) over() 1 1 2 2 3 3 4 4 5 5

运算类

count() over()

max() over()

min() over()

sum() over()

avg() over()

其他类

选取窗口内的第一个值/最后一个值

first_value() over()

last_value() over()