pgsql 窗口函数
时间: 2023-07-19 15:08:40 浏览: 61
PostgreSQL 中的窗口函数可以用来在查询结果中计算排名、比率、累计和等等,同时还可以在不改变结果集的情况下访问其他行的数据。窗口函数的语法如下:
```
<窗口函数>([expression]) OVER (
[PARTITION BY partition_expression, ... ]
[ORDER BY sort_expression [ASC|DESC], ... ]
[frame_clause]
)
```
其中 `<窗口函数>` 是指要使用的窗口函数,`expression` 是指要计算的表达式,`PARTITION BY` 是指要分组的列,`ORDER BY` 是指要排序的列,`frame_clause` 是指窗口的范围。
以下是一些窗口函数的示例:
- `ROW_NUMBER()`: 计算每行的排名,不考虑重复值。
- `RANK()`: 计算每行的排名,相同值的行得到相同的排名,下一个排名将会跳过相同数量的行。
- `DENSE_RANK()`: 计算每行的排名,相同值的行得到相同的排名,下一个排名将会跳过相同数量的行,但是排名不会跳过空位。
- `PERCENT_RANK()`: 计算每行的相对排名,返回值是一个 0 到 1 之间的实数。
- `CUME_DIST()`: 计算每行的累计分布函数,返回值是一个 0 到 1 之间的实数,表示在当前行之前的所有行所占的比例。
- `LAG()` 和 `LEAD()`: 分别返回当前行的前一行和后一行的值。
- `SUM() OVER ()`: 计算当前行的累计和。
- `AVG() OVER ()`: 计算当前行的平均值。
- `MAX() OVER ()`: 计算当前行的最大值。
- `MIN() OVER ()`: 计算当前行的最小值。
以上只是窗口函数的一小部分,具体的函数和用法可以参考 PostgreSQL 文档。