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

MySQL8.0窗口函数

开窗函数(Window Functions)在MySQL 8.0中得到了支持,这为执行复杂查询提供了极大的便利。开窗函数允许你对一组行的集合(即窗口)执行聚合计算,而不需要将这些行分组(GROUP BY),这样可以保留明细数据的同时进行复杂的分析。

常用开窗函数

  • ROW_NUMBER():为结果集中的每一行分配一个唯一的行号,从1开始。
  • RANK():根据ORDER BY子句排序的结果,为结果集中的每一行分配一个排名。如果存在相同值,则跳过后续排名。
  • DENSE_RANK():与RANK()类似,但如果存在相同值,不会跳过后续排名。
  • NTILE(n):将分区或结果集划分为n个桶,并为每一行分配一个桶编号。
  • SUM(), AVG(), MIN(), MAX()等聚合函数:可以在不使用GROUP BY的情况下计算聚合值。

使用示例

假设有一个名为sales的表,包含id, name, amount三个字段,想要按amount降序排列并为每条记录添加排名:

SELECT 
    id, name, amount,
    ROW_NUMBER() OVER (ORDER BY amount DESC) AS 'RowNum',
    RANK() OVER (ORDER BY amount DESC) AS 'Rank',
    DENSE_RANK() OVER (ORDER BY amount DESC) AS 'DenseRank'
FROM sales;

在这个例子中,我们使用了ROW_NUMBER(), RANK(), 和 DENSE_RANK()这三个开窗函数来展示不同类型的排名方式。

另外,开窗函数还可以结合PARTITION BY子句使用,以实现基于特定列值的分区统计。例如,如果你想在上面的例子中按照销售人员(假设name表示销售人员)来分别计算他们的销售额排名,可以这样做:

SELECT 
    id, name, amount,
    ROW_NUMBER() OVER (PARTITION BY name ORDER BY amount DESC) AS 'SalesRankPerPerson'
FROM sales;

这将为每个销售人员单独计算其销售额的排名。开窗函数极大地增强了SQL的功能,使得处理复杂的数据分析任务变得更加简单直接。

其它例子

SELECT 
    aad.record_date, 
    aad.user_id, 
    aad.`type`, 
    aac.full_category_name AS category_name, 
    aad.amount, 
    aad.remark,
    SUM(aad.amount) OVER (PARTITION BY aad.record_date) AS total_daily_amount -- 使用窗口函数计算每天的总金额
FROM 
    aias_accounting_detail aad 
LEFT JOIN 
    aias_accounting_category aac 
ON 
    aad.category_id = aac.id
ORDER BY 
    aad.record_date DESC;

http://www.kler.cn/a/579853.html

相关文章:

  • HTML 表格详解(简单易懂较详细)
  • 云服务运维智能时代:阿里云操作系统控制台
  • 利用paddleocr解决图片旋转问题
  • 死锁的产生以及如何避免
  • PAT乙级(1091 N-自守数)C语言解析
  • 日期类、Date、Calendar、IO 流、File
  • Windows简易操作(二)
  • Science Advances 多功能粘性皮肤增强了机器人与环境的交互
  • JavaScript网页设计案例:打造动态与交互性并存的用户体验
  • 【3DMAX插件】3DMAX建筑大师插件MasterBuilder使用方法
  • Rabbitmq--延迟消息
  • 深入理解C语言预处理器:从原理到实战
  • 游戏引擎学习第148天
  • 使用Python和p5.js创建的迷你游戏示例,该游戏包含多个屏幕和动画,满足在画布上显示图像、使用键盘命令移动图像
  • AXI接口总结
  • DeepSeek-进阶版部署(Linux+GPU)
  • RAG助力机器人场景理解与具身操作!EmbodiedRAG:基于动态三维场景图检索的机器人任务规划
  • 腾讯云低代码开发应用
  • Unity大型游戏开发全流程指南
  • ChātGPT开发“SolidWorks工具箱”,可建海量3D模型库,能一键画图、批量赋属性、自动出图,效率提高10倍