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

【重学MySQL】八十九、窗口函数的分类和使用

【重学MySQL】八十九、窗口函数的分类和使用

  • 一、窗口函数分类
    • 1. 聚合类窗口函数
    • 2. 排名类窗口函数
    • 3. 分布类窗口函数
    • 4. 前后行类窗口函数
    • 5. 头尾函数
  • 二、窗口函数语法
  • 三、典型使用场景
    • 场景1:分组聚合
    • 场景2:排名计算
    • 场景3:移动平均
    • 场景4:前后值对比
  • 四、高级技巧

一、窗口函数分类

1. 聚合类窗口函数

  • SUM():计算窗口内数值总和
  • AVG():计算窗口内数值平均值
  • COUNT():统计窗口内行数
  • MAX()/MIN():获取窗口内最大/最小值

2. 排名类窗口函数

  • ROW_NUMBER():生成唯一行号(1,2,3…)
  • RANK():允许并列的排名(1,1,3…)
  • DENSE_RANK():密集排名(1,1,2…)
  • NTILE(n):将数据分为n个桶

3. 分布类窗口函数

  • PERCENT_RANK():计算百分比排名
  • CUME_DIST():计算累积分布

4. 前后行类窗口函数

  • LAG(col, n):获取前n行数据
  • LEAD(col, n):获取后n行数据

5. 头尾函数

  • FIRST_VALUE(col):获取窗口首行值
  • LAST_VALUE(col):获取窗口末行值

二、窗口函数语法

函数名() OVER ([PARTITION BY 分组字段][ORDER BY 排序字段 [ASC|DESC]][frame_clause]
)
  • PARTITION BY:将结果集拆成多个分区,各自独立计算。
  • ORDER BY:决定窗口内的顺序。
  • ROWS|RANGE:限定窗口的物理/逻辑边界。

三、典型使用场景

场景1:分组聚合

-- 计算每个部门的平均工资
SELECT name,department,salary,AVG(salary) OVER (PARTITION BY department) AS dept_avg_salary
FROM employees;

场景2:排名计算

-- 按成绩降序排名(允许并列)
SELECT student_id,score,RANK() OVER (ORDER BY score DESC) AS ranking
FROM exam_results;

场景3:移动平均

-- 计算3天移动平均温度
SELECT date,temperature,AVG(temperature) OVER (ORDER BY date ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS moving_avg
FROM weather_data;

场景4:前后值对比

-- 对比本月与上月销售额
SELECT month,sales,LAG(sales, 1) OVER (ORDER BY month) AS prev_month_sales,sales - LAG(sales, 1) OVER (ORDER BY month) AS growth
FROM monthly_sales;

四、高级技巧

  1. 多级排序PARTITION BY + ORDER BY 组合使用
  2. 窗口框架控制:使用 ROWS/RANGE 定义精确计算范围
  3. 命名窗口:通过 WINDOW 子句复用窗口定义

窗口函数在OLAP分析、趋势计算、异常检测等场景中表现优异,可显著简化复杂查询逻辑。

http://www.dtcms.com/a/353397.html

相关文章:

  • Mysql杂志(三)
  • 【46页PPT】公司数字化转型规划与实践(附下载方式)
  • 学习Python中Selenium模块的基本用法(7:元素操作-1)
  • 应变片与分布式光纤传感:核心差异与选型指南
  • 极海发布APM32F425/427系列高性能MCU:助力工业应用升级
  • laravel学习并连接mysql数据库
  • Linux 软件编程(十二)网络编程:TCP 并发服务器构建与 IO 多路复用
  • redis---set详解
  • Tortoisegit配置ssh教程
  • Vue3 新特性 defineModel 全面解析:让 v-model 写法更优雅
  • 项目智能家居---OrangePi全志H616
  • GitHub 宕机自救指南:保障开发工作连续性
  • 蓝桥杯算法之基础知识(3)——Python的idle的快捷键设置(idle改键)
  • 信任,AI+或人机环境系统智能的纽带
  • 深入解析EDCA通道与参数配置:优化Wi-Fi服务质量的关键策略
  • 新手向:网络编程完全指南
  • Jetson 分区知识全解与 OTA 升级实战
  • Containerd 安装与配置指南
  • 如何验证二叉搜索树:两种高效方法详解
  • 光伏设计平台:按组件数量铺设光伏板,精准控制投资成本
  • 推荐系统王树森(四)特征交叉+行为序列
  • 智能体前沿-主动信息获取理论基础
  • 汇川SV660A 伺服EMC电源滤波的安装要求及使用方法
  • Swift 解法详解 LeetCode 364:嵌套列表加权和 II
  • 【ConcurrentHashMap】实现原理和HashMap、Redis哈希的区别
  • 【Linux网络】网络基础
  • 如何高效地学习:从“死记硬背”到“内化创新”
  • 第二章从事件驱动到信号
  • ESP32使用场景及大规模物联网IoT
  • 【高级机器学习】3. Convex Optimisation