大数据学习(134)-数据分析函数对比对比 range between ... and ... range between ... and ... 与 rows between ... and ...
🍋🍋🍋🍋在SQL窗口函数中,和都用于定义窗口框架(window frame),但它们在确定窗口范围的方式上有重要区别。
·
🍋🍋大数据学习🍋🍋
🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞
在SQL窗口函数中,RANGE BETWEEN ... AND ...
和 ROWS BETWEEN ... AND ...
都用于定义窗口框架(window frame),但它们在确定窗口范围的方式上有重要区别。
ROWS BETWEEN ... AND ...
- 基于物理行:根据结果集中的物理行位置确定窗口范围
- 固定行数:指定的是当前行之前或之后的固定行数
- 不关心值:不考虑行的实际值,只关心它们在结果集中的位置
- 性能较好:通常计算成本较低,因为不需要比较值
-- 当前行、前一行和后一行
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
-- 前10行到当前行
ROWS BETWEEN 10 PRECEDING AND CURRENT ROW
RANGE BETWEEN ... AND ...
- 基于值范围:根据指定列的值范围确定窗口范围
- 动态范围:窗口包含所有行,只要它们的值在指定范围内
- 需要ORDER BY:必须与ORDER BY子句一起使用
- 可能产生不连续窗口:如果值不连续,可能跳过某些行
- 性能较低:通常计算成本较高,因为需要比较值
-- 当前行和所有具有相同值的行
RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
-- 当前日期和前3天的数据(假设按日期排序)
RANGE BETWEEN INTERVAL '3' DAY PRECEDING AND CURRENT ROW
主要区别
特性 | ROWS BETWEEN | RANGE BETWEEN |
---|---|---|
基础 | 物理行位置 | 列值范围 |
是否需要ORDER BY | 不需要 | 必须 |
窗口连续性 | 总是连续的 | 可能不连续 |
性能 | 通常更高 | 通常更低 |
适用场景 | 行数固定的计算 | 基于值的范围计算 |
使用建议
- 当需要基于固定行数进行计算时(如移动平均),使用
ROWS
- 当需要基于值范围进行计算时(如日期范围),使用
RANGE
- 注意
RANGE
在某些数据库中的实现可能有限制

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)