你的位置:首页 > 数据库

[数据库]开窗函数之OVER子句、PARTITION BY 子句


开窗函数与聚合函数一样,都是对行的集合组进行聚合计算。它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。
开窗函数的调用格式为:函数名(列) OVER(选项)。
第一大类:聚合开窗函数====》聚合函数(列) OVER (选项),这里的选项可以是PARTITION BY子句,表示根据PARTITION BY后面的字段分组。
第二大类:排序开窗函数====》排序函数(列) OVER (选项),这里的选项可以是ORDER BY子句,也可以是PARTITION BY子句+ORDER BY子句,但不可以只是PARTITION BY子句。

例1:

1 -- 通过id_parent排序后并得到一个序号列2 select row_number() over(order by id_parent) as rownumber,* from COM_datadictionaryInfo where id_parent is not null

例2:

1 -- 通过id_parent分组后并得到每组的记录数2 select count(*) over(partition by id_parent) as rownumber,* from COM_datadictionaryInfo where id_parent is not null

例3:

1 -- 通过id_parent分组、level排序后得到每组的序列号2 select row_number() over(partition by id_parent order by level) as rownumber,* from COM_datadictionaryInfo where id_parent is not null