详细介绍:MySQL 8.0 窗口函数全面解析与实例

一、窗口函数概述

窗口函数(Window Functions)是 MySQL 8.0 引入的重要特性之一,允许在 不破坏原始数据行 的情况下,对数据进行 复杂分析(如排名、累计、滑动窗口计算等)。与传统的 GROUP BY 聚合不同,窗口函数通过 OVER() 子句定义计算范围,保留了每行的独立性。


二、窗口函数核心语法
<窗口函数>
  ([参数]
  )
  OVER (
  [
  PARTITION
  BY <分区列>
    ]
    [
    ORDER
    BY <排序列>
      ]
      [
      ROWS/RANGE <窗口帧定义>
        ]
        )
  • PARTITION BY:将数据划分为多个分区,每个分区独立计算。
  • ORDER BY:定义窗口内数据的排序规则。
  • ROWS/RANGE:定义窗口帧(计算范围),例如 ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(从分区开头到当前行)。

三、窗口函数分类与实例
1. 排名函数

用于为分区内数据分配行号或排名。

函数功能描述
ROW_NUMBER()为每行分配唯一序号(从1开始)。
RANK()相同值排名相同,后续排名跳跃。
DENSE_RANK()相同值排名相同,后续排名连续。
NTILE(n)将分区内行平均分成 n 组,分配组号。

实例 1:部门内员工薪资排名

SELECT
department,
name,
salary,
ROW_NUMBER(
)
OVER (
PARTITION
BY department ORDER
BY salary DE
posted @ 2025-07-20 11:15  yfceshi  阅读(67)  评论(0)    收藏  举报