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

MySQL 8 其他新特性

MySQL 8 其他新特性

MySQL 8 其他新特性


1. MySQL 8 新特性概述

1.1 MySQL 8.0 新增特性

  • 窗口函数:支持ROW_NUMBER()RANK()DENSE_RANK()等函数,可对分区数据进行排序、排名和分析。
  • 公用表表达式(CTE):支持普通CTE和递归CTE,简化复杂查询的编写。

1.2 MySQL 8.0 移除的旧特性

  • 部分过时的SQL模式、系统变量和语法被移除,以优化性能和规范性。

2. 新特性1:窗口函数

2.1 使用窗口函数前后对比

窗口函数与分组聚合不同,它不会将结果合并为一条记录,而是将聚合结果附加到每一条原始记录中,便于进行分区内的排名、前后对比等操作。

2.2 窗口函数分类

  • 静态窗口函数:窗口大小固定(如序号函数、分布函数)。
  • 动态窗口函数:窗口大小随记录变化(如前后函数、首尾函数)。

2.3 语法结构

窗口函数名() OVER ([PARTITION BY 分区列] [ORDER BY 排序列]
) AS 别名

2.4 分类讲解

1. 序号函数

函数 说明
ROW_NUMBER() 顺序排序,生成连续唯一序号
RANK() 并列排序,相同值序号相同,后续序号不连续(如1,1,3)
DENSE_RANK() 并列排序,相同值序号相同,后续序号连续(如1,1,2)

示例:按类别对商品价格降序排序

-- ROW_NUMBER()
SELECT ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY price DESC) AS row_num,id, category_id, category, NAME, price, stock
FROM goods;-- RANK()
SELECT RANK() OVER(PARTITION BY category_id ORDER BY price DESC) AS row_num,id, category_id, category, NAME, price, stock
FROM goods;-- DENSE_RANK()
SELECT DENSE_RANK() OVER(PARTITION BY category_id ORDER BY price DESC) AS row_num,id, category_id, category, NAME, price, stock
FROM goods;-- 取每个类别价格最高的3种商品
SELECT * FROM (SELECT ROW_NUMBER() OVER(PARTITION BY category_id ORDER BY price DESC) AS row_num,id, category_id, category, NAME, price, stockFROM goods
) t WHERE row_num <= 3;

2. 分布函数

函数 说明
PERCENT_RANK() 等级百分比,公式:(rank - 1) / (rows - 1)
CUME_DIST() 累积分布值,查询小于或等于当前值的比例

示例:计算商品价格的百分比排名和累积分布

-- PERCENT_RANK()
SELECT RANK() OVER w AS r,PERCENT_RANK() OVER w AS pr,id, category_id, category, NAME, price, stock
FROM goods
WHERE category_id = 1 
WINDOW w AS (PARTITION BY category_id ORDER BY price DESC);-- CUME_DIST()
SELECT CUME_DIST() OVER(PARTITION BY category_id ORDER BY price ASC) AS cd,id, category, NAME, price
FROM goods;

3. 前后函数

函数 说明
LAG(expr, n) 返回当前行前n行的expr
LEAD(expr, n) 返回当前行后n行的expr

示例:查询商品价格与前/后一个商品的差值

-- LAG():前一个商品价格差值
SELECT id, category, NAME, price, pre_price, price - pre_price AS diff_price
FROM (SELECT id, category, NAME, price,LAG(price, 1) OVER w AS pre_priceFROM goods WINDOW w AS (PARTITION BY category_id ORDER BY price)
) t;-- LEAD():后一个商品价格差值
SELECT id, category, NAME, behind_price, price, behind_price - price AS diff_price
FROM (SELECT id, category, NAME, price,LEAD(price, 1) OVER w AS behind_priceFROM goods WINDOW w AS (PARTITION BY category_id ORDER BY price)
) t;

4. 首尾函数

函数 说明
FIRST_VALUE(expr) 返回分区内第一个expr的值
LAST_VALUE(expr) 返回分区内最后一个expr的值

示例:按价格排序,查询每个类别第一个和最后一个商品的价格

-- FIRST_VALUE()
SELECT id, category, NAME, price, stock,FIRST_VALUE(price) OVER(PARTITION BY category_id ORDER BY price) AS first_price
FROM goods;-- LAST_VALUE()
SELECT id, category, NAME, price, stock,LAST_VALUE(price) OVER w AS last_price
FROM goods 
WINDOW w AS (PARTITION BY category_id ORDER BY price);

5. 其他函数

函数 说明
NTH_VALUE(expr, n) 返回分区内第nexpr的值
NTILE(n) 将分区数据分为n个桶,记录桶编号

示例:

-- NTH_VALUE():查询排名第2和第3的价格
SELECT id, category, NAME, price,NTH_VALUE(price, 2) OVER w AS second_price,NTH_VALUE(price, 3) OVER w AS third_price
FROM goods 
WINDOW w AS (PARTITION BY category_id ORDER BY price);-- NTILE():按价格将商品分为3组
SELECT NTILE(3) OVER w AS nt, id, category, NAME, price
FROM goods 
WINDOW w AS (PARTITION BY category_id ORDER BY price);
http://www.zskr.cn/news/1495543.html

相关文章:

  • 2026年 CNC加工源头厂家实力榜单:塑胶模具/压铸模具/五金模具/夹治具/石墨零件/汽车配件/机械零件/铝合金零件/航空零件/铜公电极推荐 - 品牌发掘
  • Nex-N2重磅开源!具备“智能体思维”,性能直逼GPT-5.5,引领AI新纪元!
  • 多 Agent 架构:从单个助手到协作团队
  • SB-Admin-Angular项目架构解析:理解AngularJS模块化设计
  • 163MusicLyrics:一站式音乐歌词下载与格式转换神器
  • 2026镇海新房除甲醛公司哪家专业?垂直测评:宁波博豪环保凭硬实力脱颖而出 - 专注室内空气检测治理
  • 2026年自动光杆排线器/全自动光杆排线器/伺服排线器厂家推荐:多功能排线机与排线器配件品牌深度解析及选购指南 - 企业推荐官【官方】
  • 终极TikTok评论采集工具:3分钟获取完整评论数据,无需编程基础
  • i.MX RT1160硬件设计实战:从数据手册到SD/eMMC、以太网时序与启动配置
  • 方法类专利选哪种?2026工艺/算法/流程/配方专利选型全攻略|为什么只能申发明专利、适配场景、通过率、避坑误区解析|广州正规专利代理机构TOP3实测测评 - 信息热点
  • 避开这些坑!ArcGIS成本路径分析从数据准备到结果可视化的保姆级避坑指南
  • 铁岭银州区车灯升级门店专业度排行:合规工艺双维度 - 起跑123
  • 如何在Windows资源管理器中快速识别APK文件:终极图标显示解决方案
  • 如何在VS Code笔记本中使用vscode-markdown-mermaid绘制专业流程图:完整指南
  • 3步配置Kodi IPTV Simple客户端:打造你的家庭直播电视中心
  • 成都贝之森科技,实力与口碑俱佳的选择 - 信息热点
  • 2026义乌爪钻批发行业三大核心趋势解读 - 信息热点
  • 2026重庆除甲醛公司性价比排行,这些选择更靠谱 - GrowthUME
  • 期货量化多品种跑起来 CPU 很高:天勤订阅与 is_changing 精简
  • 债券市场数据获取:Finnhub Python API在固定收益分析中的实战应用
  • AI产品经理成长之路:从零基础到专家的详细学习路线全解析
  • AtomGit Flutter鸿蒙客户端:Provider状态管理
  • 2026嘉兴AI搜索优化服务商实战选型评测与避坑指南全解析 - 品牌报告
  • 如何快速掌握MPV_lazy播放器:Windows用户的终极配置指南
  • Kinetis K22F I2S/SAI低功耗时序深度解析与音频系统设计指南
  • Path of Building终极指南:5分钟快速掌握流放之路最强Build规划工具
  • CAPL脚本里那些坑:为什么我的变量值总是不对?
  • 5个简单步骤掌握Trelby:免费专业剧本写作软件的完整指南
  • 从Dijkstra到A*:用动画和真实地图数据,彻底搞懂路径规划算法的演进与选型
  • Windows Terminal文件拖放终极指南:3个技巧让命令行效率翻倍