深入解析SQL窗口函数

深入解析SQL窗口函数:数据处理的神兵利器

一、什么是窗口函数?

窗口函数(Window Function)是SQL中用于在数据集的特定"窗口"(数据子集)上执行计算的特殊函数。与传统聚合函数不同,窗口函数不会将多行合并为单行结果,而是在保留原始行数据的同时,为每一行添加额外的计算结果。

核心特点:

  • 保持行级粒度:在计算结果的同时保留所有原始数据
  • 灵活定义窗口:通过PARTITION BY划分数据子集
  • 动态排序支持:结合ORDER BY实现排序相关计算
  • 滑动窗口机制:支持ROWS/RANGE定义移动计算范围

二、窗口函数核心语法

基础语法结构

SELECT 
    column_list,
    window_function() OVER (
        [PARTITION BY partition_expression]
        [ORDER BY sort_expression [ASC|DESC]]
        [frame_clause]
    ) AS alias
FROM table_name;

核心组件解析

1. PARTITION BY(可选)

将数据集划分为多个分区(类似GROUP BY分组)

-- 按部门分区计算
AVG(salary) OVER (PARTITION BY department)
2. ORDER BY(可选)

定义分区内的排序规则

-- 按入职日期排序累计求和
SUM(salary) OVER (ORDER BY join_date)
3. 帧子句(Frame Clause)

定义滑动窗口的范围(默认包含当前行到分区开始)

ROWS BETWEEN 3 PRECEDING AND CURRENT ROW  -- 最近4行窗口
RANGE BETWEEN INTERVAL '7' DAY PRECEDING AND CURRENT ROW  -- 7天范围

三、常用窗口函数分类

1. 聚合型窗口函数

SELECT 
    product_id,
    sale_date,
    amount,
    AVG<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白嫖不白嫖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值