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

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;

相关文章:

  • 请谈谈 TypeScript 中的接口(interface)和类型别名(type alias),它们的区别是什么?
  • ThinkPHP8.0+MySQL8.0搭建简单实用电子证书查询系统
  • Kafka×DeepSeek:智能决策破取经八十一难!
  • 若依-导出后端解析
  • MySQL性能调优实战手册:从慢查询到执行计划全解析
  • springmvc想要一个模块使用相同的url的前缀,怎么处理
  • 配置 Thunderbird 以使用 outlook 邮箱
  • WebGPU:前端图形性能的新纪元——开启浏览器高性能计算新时代
  • Linux中Docker容器构建MariaDB数据库教程
  • 基于类型的声明接收props
  • 【深度学习】参数管理
  • 《平面几何强化训练题集》第2章5到9题
  • Linux:网络(网络编程基础)
  • GET请求、POST请求的区别
  • 案例分享 |高质量数据服务赋能智慧医疗3.0时代
  • 【嵌入式设备】滑动变阻器使用方式
  • eBPF初了解
  • 文章集锦-值得反复修订的文章
  • 我眼中的无服务架构:云时代的创新引擎
  • wordpress两个网站用同一个数据库的实现方法
  • 青海互动网站建设/百度用户服务中心
  • 政府单位建设网站的申请报告/推广方案策略怎么写
  • 永嘉营销网站建设/成都网站快速优化排名
  • 自考都到哪个网站找题做/电商网站大全
  • 自己做网站有名/我想自己建立一个网站
  • 如何做网站的教程视频/收录入口在线提交