窗口函数在保留原行数基础上添加统计结果,如RANK和ROWNUMBER用于排序,前者对相同值并列排名并跳号,后者连续编号;与GROUP BY不同,窗口函数不减少行数,可同时显示明细与聚合数据,适用于移动平均、累计求和、Top N查询等场景。

窗口函数,说白了,就是在SQL查询中,让你能在每一行数据旁边,加上一些“额外的统计信息”。它不像 GROUP BY 那样会改变行的数量,而是保持原有行数不变,只是多了几列“窗口”计算出来的结果。RANK 和 ROWNUMBER 算是窗口函数里比较常用的了,它们主要用来进行排序。
SQL窗口函数,主要就是为了在查询结果中,既能看到明细数据,又能看到基于这些数据计算出来的聚合结果。
RANK、ROWNUMBER的应用:直接在SELECT语句中使用 OVER() 子句来定义窗口。OVER() 子句里面可以指定PARTITION BY(分组)和ORDER BY(排序)子句。
GROUP BY 会将数据按照指定的列进行分组,然后对每个组进行聚合计算,最终返回每个组的聚合结果,行的数量会减少。而窗口函数不会改变行的数量,它只是在每一行旁边添加一些基于窗口的计算结果。简单来说,GROUP BY 是用来做聚合的,窗口函数是用来做“增强”的。
举个例子,你想统计每个部门的平均工资,并显示每个员工的工资和部门平均工资。用 GROUP BY 只能得到每个部门的平均工资,看不到每个员工的工资。但用窗口函数,就能同时看到每个员工的工资和该员工所在部门的平均工资。
SELECT
employee_name,
salary,
*G(salary) OVER (PARTITION BY department_id) AS department_*g_salary
FROM
employees;这个例子中,
*G(salary) OVER (PARTITION BY department_id)就是一个窗口函数。
PARTITION BY department_id表示按照部门分组,
*G(salary)计算每个部门的平均工资。结果集中,每一行都会显示员工姓名、工资和该员工所在部门的平均工资。
RANK 和 ROWNUMBER 都是用来给结果集中的行进行排序的,但它们的行为略有不同。
ROWNUMBER(): 简单粗暴地给每一行分配一个唯一的序号,从1开始,按照ORDER BY子句指定的顺序递增。即使ORDER BY的列有相同的值,ROWNUMBER() 也会分配不同的序号。
RANK(): 会考虑ORDER BY子句中相同的值。如果两行的排序值相同,RANK() 会给它们分配相同的排名,并跳过后续的排名。例如,如果有两行排名都是第2,那么下一行的排名就是第4,而不是第3。
-- ROWNUMBER() 示例
SELECT
product_name,
price,
ROW_NUMBER() OVER (ORDER BY price DESC) AS row_num
FROM
products;
-- RANK() 示例
SELECT
product_name,
price,
RANK() OVER (ORDER BY price DESC) AS rank_num
FROM
products;假设
products表中有三条数据:
Krisp
AI噪音消除工具
135
查看详情
| product_name | price |
|---|---|
| A | 100 |
| B | 100 |
| C | 90 |
ROWNUMBER() 的结果会是:
| product_name | price | row_num |
|---|---|---|
| A | 100 | 1 |
| B | 100 | 2 |
C |
90 | 3 |
RANK() 的结果会是:
| product_name | price | rank_num |
|---|---|---|
| A | 100 | 1 |
| B | 100 | 1 |
| C | 90 | 3 |
可以看到,ROWNUMBER() 给每个产品都分配了唯一的序号,而 RANK() 给价格相同的产品分配了相同的排名。
窗口函数在数据分析中有很多实际应用场景,例如:
下面是一个计算移动平均值的例子:
SELECT
sale_date,
sale_amount,
*G(sale_amount) OVER (ORDER BY sale_date ASC ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_*g
FROM
sales;ROWS BETWEEN 6 PRECEDING AND CURRENT ROW指定了窗口的大小,表示计算当前行和前6行的平均值。这个查询可以帮助你分析销售额的趋势。
再比如,找出每个部门工资最高的员工:
SELECT
department_id,
employee_name,
salary
FROM (
SELECT
department_id,
employee_name,
salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank_num
FROM
employees
) AS subquery
WHERE
rank_num = 1;这个例子中,先用窗口函数计算每个员工在部门内的工资排名,然后筛选出排名为1的员工,即工资最高的员工。
窗口函数的功能很强大,掌握了它,可以让你在SQL查询中更加灵活地进行数据分析。
以上就是如何在SQL中使用窗口函数?RANK、ROWNUMBER的应用的详细内容,更多请关注其它相关文章!
# 是在
# 西乡搜索引擎网站优化
# 服装关键词排名团队优化
# 公众号营销推广公司排名
# seo霸屏首 推乐云seo权威
# 企业营销推广攻略大全
# 电商seo使用技巧
# 北京正规seo优化资费
# 关键词seo排名赞赏易 速达
# 金华关键词排名企业
# 西安网站建设免费咨询
# sql语言
# 是一个
# 配了
# 两行
# 如何在
# 行数
# 中有
# 都是
# 平均工资
# 子句
# 区别
相关文章:
我的世界官方游戏入口 我的世界官网平台直达链接
夸克AO3官网入口_AO3镜像网站2025推荐
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
Golang如何实现Web接口签名验证_Golang Web接口签名校验开发方法
poki免费入口快捷访问 poki人气小游戏直接玩站点
海棠账号登录入口_登录海棠账户同步阅读记录
ACG动漫视频网入口 ACG动漫*免费正版观看地址
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
Lar*el 8 多关键词数据库搜索优化实践
精准捕获:如何在页面中监听除特定元素外的所有点击事件
小红书网页版入口链接分享 小红书官网直接进
C++编译期如何执行复杂计算_C++模板元编程(TMP)技巧与应用
iwriter统一登录平台 iwrite账号密码登录页面
win11如何加载ICC颜色配置文件 Win11校色文件安装与显示器色彩管理【指南】
晋江读书网页版在线登录 晋江读书电脑版官网
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
J*aScript生成器_j*ascript异步迭代
Steam官网入口直达 Steam注册及登录步骤
QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台
深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现
京东单号查询入口_京东快递订单追踪入口
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
c++中为什么推荐使用using替代typedef_c++现代化类型别名
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
Lar*el开发:如何在编辑界面正确预选数据库中的多选标签
c++ 获取系统当前时间 c++时间戳获取方法
AO3最新入口2025公告_AO3中文官网合集
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
Tabulator表格日期时间排序问题及自定义解决方案
怎样使用“本地安全策略”提升Windows安全性_Secpol.msc配置指南【高手】
c++ dfs和bfs代码 c++深度广度优先搜索算法
Python getattr() 异常处理深度解析:避免程序意外退出
海量存储:机器视觉智能化的核心基石
Lar*el 递归关系中排除指定分支的教程
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
J*aScript实现单选按钮与关联输入框的联动禁用教程
在Socket.IO连接中实现Access Token自动更新与动态重连
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
如何在Promise链中有效终止错误处理后的执行
铁路12306的积分有效期是多久_铁路12306积分有效期说明
蛙漫官方正版入口 蛙漫网页在线全集免费观看
《明末:渊虚之羽》设计师谈设计角色:那会刚毕业 充满激情
高德地图怎么看全景照片_高德地图全景照片浏览教程
格力空气能E5故障代码是什么情况_格力空气能E5代码解析与应对措施
J*a TimerTask中HashMap意外清空的深层原因与解决方案
Fabric模组开发:自定义物品与物品组的现代管理方法
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
神经网络二分类模型训练异常:高损失与完美验证准确率的排查与修正
*请认真填写需求信息,我们会在24小时内与您取得联系。