数据仓库服务 GAUSSDB(DWS)-窗口函数:语法格式
语法格式
窗口函数需要特殊的关键字OVER语句来指定窗口触发窗口函数。OVER语句用于对数据进行分组,并对组内元素进行排序。窗口函数用于给组内的值生成序号:
1 2 3 4 |
function_name ([expression [, expression ... ]]) OVER ( window_definition ) function_name ([expression [, expression ... ]]) OVER window_name function_name ( * ) OVER ( window_definition ) function_name ( * ) OVER window_name |
其中window_definition子句option为:
1 2 3 4 |
[ existing_window_name ] [ PARTITION BY expression [, ...] ] [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ] [ frame_clause ] |
PARTITION BY选项指定了将具有相同PARTITION BY表达式值的行分为一组。
ORDER BY选项用于控制窗口函数处理行的顺序。ORDER BY后面必须跟字段名,若ORDER BY后面跟数字,该数字会被按照常量处理,对目标列没有起到排序的作用。
frame_clause子句option为:
1 2 |
[ RANGE | ROWS ] frame_start [ RANGE | ROWS ] BETWEEN frame_start AND frame_end |
当需要指定一个窗口对分组内所有行结果进行计算时,我们需要指定窗口区间开始的行和结束的行。窗口区间支持RANGE、ROWS两种模式,ROWS以物理单位(行)指定窗口,RANGE将窗口指定为逻辑偏移量。
RANGE、ROWS中可以使用BETWEEN frame_start AND frame_end指定边界可取值。如果仅指定frame_start,则frame_end默认为CURRENT ROW。
frame_start和frame_end取值为:
- CURRENT ROW,当前行。
- N PRECEDING,当前行向前第n行。
- UNBOUNDED PRECEDING,当前PARTITION的第1行。
- N FOLLOWING,当前行向后第n行。
- UNBOUNDED FOLLOWING,当前PARTITION的最后1行。
需要注意,frame_start不能为UNBOUNDED FOLLOWING,frame_end不能为UNBOUNDED PRECEDING,并且frame_end选项不能比上面取值中出现的frame_start选项早。例如RANGE BETWEEN CURRENT ROW AND N PRECEDING是不被允许的。
- GaussDB(DWS)常用SQL_常用SQL命令_SQL语法
- DWS产品介绍_DWS产品优势_DWS功能_DWS使用场景_DWS是什么
- 数据仓库服务GaussDB(DWS)_SQL on Anywhere
- DWS安全_数据仓库服务安全_DWS数据安全管理_DWS安全保障_DWS安全策略
- 调用GaussDB(DWS) API接口_数据仓库服务调用API_如何调用API_在DWS中调用API
- 什么是数据湖探索服务_数据湖探索DLI用途与特点
- GaussDB(DWS)服务_什么是IoT数仓_如何使用IoT数仓
- 如何进行日志采集和转储_日志平台_日志接入_日志转储
- DWS资源管理_GaussDB(DWS)资源管理作用_DWS资源管控
- GaussDB数据库产品特性_华为gaussdb_高斯语法