当前位置:   article > 正文

[MySQL]窗口函数_mysql窗口函数列名

mysql窗口函数列名

MySQL窗口函数(原地址)

1.窗口函数的基本语法如下:

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)
  • 1
  • 2

<窗口函数>的位置,可以放以下两种函数:

1) 专用窗口函数,包括后面要讲到的rank, dense_rank, row_number等专用窗口函数。

2) 聚合函数,如sum. avg, count, max, min等

因为窗口函数是对where或者group by子句处理后的结果进行操作,所以窗口函数原则上只能写在select子句中。

2.窗口函数

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)
  • 1
  • 2

1.partition by用来对表分组。
2.order by子句的功能是对分组后的结果进行排序,默认是按照升序(asc)排列

3.总结

简单来说,窗口函数有以下功能:

1)同时具有分组和排序的功能

2)不减少原表的行数

3)语法如下:

<窗口函数> over (partition by <用于分组的列名>
order by <用于排序的列名>)

4.其他专业窗口函数

专用窗口函数rank, dense_rank, row_number的区别

select *,
   rank() over (order by 成绩 desc) as ranking,
   dense_rank() over (order by 成绩 desc) as dese_rank,
   row_number() over (order by 成绩 desc) as row_num
from 班级表
  • 1
  • 2
  • 3
  • 4
  • 5

仅引用,原作者:猴子
仅引用,原作者:猴子
需要强调的一点是:在上述的这三个专用窗口函数中,函数后面的括号不需要任何参数,保持()空着就可以。

5.聚合函数作为窗口函数

聚和窗口函数和上面提到的专用窗口函数用法完全相同,只需要把聚合函数写在窗口函数的位置即可,但是函数后面括号里面不能为空,需要指定聚合的列名。

select *,
   sum(成绩) over (order by 学号) as current_sum,
   avg(成绩) over (order by 学号) as current_avg,
   count(成绩) over (order by 学号) as current_count,
   max(成绩) over (order by 学号) as current_max,
   min(成绩) over (order by 学号) as current_min
from 班级表
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

仅引用,原作者:猴子
聚合函数作为窗口函数,可以在每一行的数据里直观的看到,截止到本行数据,统计数据是多少(最大值、最小值等)。同时可以看出每一行数据,对整体统计数据的影响。

6.注意事项

partition子句可是省略,省略就是不指定分组,结果如下,只是按成绩由高到低进行了排序:


select *,
   rank() over (order by 成绩 desc) as ranking
from 班级表
  • 1
  • 2
  • 3
  • 4

但是不建议如此,因为会失去窗口函数的功能,而且大多时候都需要进行分组。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/240942
推荐阅读
相关标签
  

闽ICP备14008679号