mysql 8.0 窗口函数 之 序号函数 与 sql server 序号函数 一样

sql server 序号函数

序号函数

  1. ROW_NUMBER() 顺序排序
  2. RANK() 并列排序,会跳过重复的序号,比如序号为1,1,3
  3. DENSE_RANK() 并列排序,不会跳过重复的序号,比如 序号为 1,1,2

语法结构

复制代码
函数 over (  [ partition by 字段名1, [ 字段2,。。。字段n]  order by 字段名 ASC | DESC  ] )

## 或者
函数 over 窗口名  ... ..window 窗口名  as ( [ partition by 字段名  order by 字段名  asc  |  DESC ] )

### over  关键字 指定函数窗口的范围
       如果省略后面括号中的内容,则窗口会包含满足where 条件的所有记录,窗口函数会基于所有满足where条件的记录  **进行计算**
       如果over 关键字后面的括号不为空,则可以使用如下语句设置窗口
       窗口名:为窗口设置一个别名,用来表示窗口,  放在  sql  最后位置
       partition by 子句:指定窗口函数按照哪些字段进行分组。分组后,窗口函数可以在**每个分组中分别**执行。
       order by 子句:指定窗口函数按照哪些字段进行排序,执行排序操作使窗口函数按照排序后的数据记录的**顺序**进行编号
       

select  RANK() over ( partition by course by  score  desc ) as 排名,stu_name
from   stu_grade


#   方法2 
select  RANK() over  cnd  as 排名,stu_name
from   stu_grade
where window cnd as  ( partition by course by  score  desc ) 



窗口函数的优点

使用窗口函数,只用了一步就完成了查询,而且,由于没有用到临时表,执行的效率也更高了。很显然,在这种需要用到分组统计的结果对每一条记录进行计算的场景下,使用窗口函数更好

窗口函数的作用类似于在查询中对数据进行分组,不同的是,分组操作会把分组的结果聚合成一条记录,而窗口函数是将结果置于每一条数据记录中。

窗口函数可分为: ①静态窗口函数②动态窗口函数

静态窗口函数的窗口大小是固定的,不会因为记录的不同而不同

动态窗口函数的窗口大小会随着记录的不同而变化。

相关推荐
weixin_4249993613 分钟前
mysql行级锁失效的原因排查_检查查询条件与执行计划
jvm·数据库·python
Polar__Star20 分钟前
uni-app怎么实现App端一键换肤 uni-app全局样式动态切换【实战】
jvm·数据库·python
南境十里·墨染春水1 小时前
linux学习进展 进程间通讯——共享内存
linux·数据库·学习
LinuxGeek10241 小时前
Kylin-Server-V11、openEuler-22.03和openEuler-24.03的MySQL 9.7.0版本正式发布
大数据·mysql·kylin
斯维赤2 小时前
Python学习超简单第八弹:连接Mysql数据库
数据库·python·学习
Chuer_2 小时前
讲透财务Agent核心概念,深度拆解财务Agent应用趋势
大数据·数据库·安全·数据分析·甘特图
gushinghsjj2 小时前
什么是主数据管理平台?怎么构建主数据管理平台?
大数据·数据库
Generalzy2 小时前
TinyDB轻量文档数据库
数据库
qq_654366982 小时前
如何排查Oracle客户端连接慢_DNS解析超时与sqlnet配置优化
jvm·数据库·python
黄昏晓x2 小时前
数据库基础
数据库·adb