PostGreSQL开窗函数
语法
<窗口函数>
over(partition by 分组列 order by 排序列)
order by 并非必要
over() 是开窗函数的关键词
窗口函数存在哪些 ?
聚合类:sum() avg() max() min() count()
内置函数:RANK DENSE_RANK ROW_NUMBER等等
聚合类的窗口函数使用方法和平时使用相同
以sum()为例
id type name amount
1 1 liliya 3600
2 1 will 4500
3 2 hell 2350
select
id,
name,
amount,
sum(amount)over(partiton by type) as total_amount
结果
id name amount total_amount
1 liliya 3600 8100
2 will 4500 8100
3 hell 2350 2350
内置函数:RANK,DENSE_RANK,ROW_NUMBER
三者性质相同,都是对数据进行排序并且编号,不过结果存在些许的差异
以RANK为例
table name -> t1
id type name amount
1 1 liliya 3600
2 1 will 4500
3 2 hell 2350
4 1 oldman 2300
5 2 trueman 4610
6 2 ora 2350
select
rank()over(partition by type order by amount desc