sql窗口函数中的取值函数

取值函数

  • 序号函数
  • 前后函数

窗口函数 over(parttion by 字段1 order by 字段2)

序号函数

函数名 函数功能
row_number() 连续取值,且值不重复
rank() 如果有相同的值,它们将获得相同的排名,下一个值的排名将跳过之前的排名。(会出现缺失的排名)
dense_rank() 如果有相同的值,它们将获得相同的排名,下一个值的排名不跳过之前的排名。(不会出现缺失的排名)

总结:
如果有两行的值是相同的,那么

  • ROW_NUMBER()会给它们分配不同的行号,
  • RANK()会给它们分配相同的排名并跳过下一个排名,
  • DENSE_RANK()会给它们分配相同的排名并不跳过下一个排名

前后函数

函数名 函数功能
lag(expr, n)

返回当前行的前n行的值

lead(expr, n)

返回当前行的后n行的值

函数名 函数功能
range()

基于当前行的值的。例如,RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW定义的窗口包含从分区的开始到当前行(包括当前行)的所有行。

rows()

基于当前行的位置的。例如,ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING定义的窗口包含前一行、当前行和后一行。

你可能感兴趣的:(sql语言,sql,数据库)