当前位置: 首页 > news >正文

Mysql 8.0 新特性

一 . 窗口函数

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

1.1 语法结构

1.2 序号函数

ROW_NUMBER() OVER ([PARTITION BY 列名1, 列名2, ...]  -- 可选,按指定列分组,每组内单独编号ORDER BY 列名 [ASC|DESC], ...     -- 必选,指定排序规则,决定编号顺序
)
RANK() OVER ([PARTITION BY 列名1, 列名2, ...]  -- 可选,按指定列分组,每组内单独排名ORDER BY 列名 [ASC|DESC], ...     -- 必选,指定排序规则,决定排名顺序
)

RANK() 和 ROW_NUMBER() 都是 SQL 中的窗口函数,用于对数据进行编号或排名,但核心区别在于处理相同排序值时的逻辑不同,

  • ROW_NUMBER()
    即使排序的列值相同,也会为每行分配唯一且连续的序号(序号大小由数据库内部规则决定,无并列)。
    例如:两个分数相同的行,可能被标记为 2 和 3。

  • RANK()
    当排序的列值相同时,会分配相同的排名,且后续排名会跳过中间的序号(允许并列,存在序号断层)。
    例如:两个分数相同的行都排第 2,下一行则直接排第 4(跳过第 3)。

DENSE_RANK()函数
DENSE_RANK()函数对序号进行并列排序,并且不会跳过重复的序号,比如序号为112
连续编号

DENSE_RANK() OVER ([PARTITION BY 列名1, 列名2, ...]  -- 可选,按指定列分组,每组内单独排名ORDER BY 列名 [ASC|DESC], ...     -- 必选,指定排序规则,决定排名顺序
)

对比

  • ROW_NUMBER():无并列,始终生成唯一连续序号(如 1,2,3,4)。
  • RANK():允许并列,但会跳过序号(如 1,2,2,4)。
  • DENSE_RANK():允许并列,序号连续(如 1,2,2,3)。

1.3 分布函数

PERCENT_RANK() OVER ([PARTITION BY 分区列]ORDER BY 排序列 [ASC|DESC]
)
http://www.xdnf.cn/news/1274941.html

相关文章:

  • drippingblues靶机通关练习笔记
  • 搭建本地 Git 服务器
  • nginx-主配置文件
  • Flask多进程数据库访问问题详解
  • Words or Vision Do Vision-Language Models Have Blind Faith in Text
  • Baumer高防护相机如何通过YoloV8深度学习模型实现道路坑洼的检测识别(C#代码UI界面版)
  • 基于FFmpeg的B站视频下载处理
  • 配置timer控制 IO的输出(STC8)
  • 浏览器CEFSharp88+X86+win7 之js交互开启(五)
  • 【LeetCode】102 - 二叉树的层序遍历
  • MySQL 处理重复数据详细说明
  • DBAPI 实现不同角色控制查看表的不同列
  • SQL约束:数据完整性的守护者
  • 【面试场景题】异地多活改造方案
  • 实现两个开发板的串口通讯(基于STC8实现)
  • Oracle lgwr触发条件
  • c语言常见错误
  • 深入解析微服务分布式事务的原理与优化实践
  • 【代码随想录day 16】 力扣 513.找树左下角的值
  • Linux 路由子系统深度分析:框架、实现与代码路径
  • MariaDB 数据库管理
  • 活动策划(展会、年会),在线工具能快速出邀请函不?
  • Python 实例属性和类属性
  • 为wordpress顶部header.php文件中调用不同的标题和摘要
  • H3C(基于Comware操作系统)与eNSP平台(模拟华为VRP操作系统)的命令差异
  • Shell脚本-了解i++和++i
  • 堆(Java实现)
  • Spark学习(Pyspark)
  • 整数规划-分支定界
  • 【软件测试】BUG篇 — 详解