【编程学习】SQL窗口函数一览
![](https://gcore.jsdelivr.net/gh/6YoungHome/cdn2@main/cover/6.png)
【编程学习】SQL窗口函数一览
6Youngover里面怎么写?
先写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()
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果