当前位置: 首页 > 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.dtcms.com/a/324597.html

相关文章:

  • 以太网相关协议
  • C/C++数据结构之双向链表
  • scala 样例类
  • Spring的三层架构及其各个层用到注解详细解释。
  • 零基础学Java第三讲---运算符
  • android 使用openimagelib OpenImage 实现点击放大图片,浏览
  • 【Docker实战】Spring Boot应用容器化
  • 蓝牙认证流程:BQB 测试、互操作性验证与品牌授权指南 —— 面试高频考点与历年真题解
  • Bean的实例化方式
  • WinForm之TreeView控件
  • 深入解析React Diff 算法
  • 基于 InfluxDB 的服务器性能监控系统实战(三)
  • Windchill 11.0使用枚举类型自定义实用程序实现角色管理
  • Web API开发中的数据传输:MIME类型配置与编码最佳实践
  • vulnhub-Doubletrouble靶机
  • 医学统计(随机对照研究分类变量结局数据的统计策略3)
  • AI正自我觉醒!
  • C4.5算法:增益率(Gain Ratio)
  • 洛谷 P2404 自然数的拆分问题-普及-
  • 3.3keep-alive
  • Windows11 [Close Folder Shortcut]
  • vue2升级vue3:单文件组件概述 及常用api
  • Android Intent 解析
  • 【Linux】通俗易懂讲解-正则表达式
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • JetPack系列教程(三):Lifecycle——给Activity和Fragment装个“生命探测仪“
  • redis主从模型与对象模型
  • Beelzebub靶机练习
  • 代码随想录算法训练营第五十九天|图论part9
  • 下一代防火墙总结