aggs_for_vecs
针对数组类型的聚合函数集合扩展
仓库
pjungwir/aggs_for_vecs
https://github.com/pjungwir/aggs_for_vecs
源码
aggs_for_vecs-1.4.1.tar.gz
aggs_for_vecs-1.4.1.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
aggs_for_vecs | 1.4.1 | FUNC | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4740 | aggs_for_vecs | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | aggs_for_arrays first_last_agg arraymath floatvec vector topn |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.4.1 | 1817161514 | aggs_for_vecs | - |
| RPM | PIGSTY | 1.4.1 | 1817161514 | aggs_for_vecs_$v | - |
| DEB | PIGSTY | 1.4.1 | 1817161514 | postgresql-$v-aggs-for-vecs | - |
构建
您可以使用 pig build 命令构建 aggs_for_vecs 扩展的 RPM / DEB 包:
pig build pkg aggs_for_vecs # 构建 RPM / DEB 包
安装
您可以直接安装 aggs_for_vecs 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install aggs_for_vecs; # 当前活跃 PG 版本安装
pig ext install -y aggs_for_vecs -v 18 # PG 18
pig ext install -y aggs_for_vecs -v 17 # PG 17
pig ext install -y aggs_for_vecs -v 16 # PG 16
pig ext install -y aggs_for_vecs -v 15 # PG 15
pig ext install -y aggs_for_vecs -v 14 # PG 14
dnf install -y aggs_for_vecs_18 # PG 18
dnf install -y aggs_for_vecs_17 # PG 17
dnf install -y aggs_for_vecs_16 # PG 16
dnf install -y aggs_for_vecs_15 # PG 15
dnf install -y aggs_for_vecs_14 # PG 14
apt install -y postgresql-18-aggs-for-vecs # PG 18
apt install -y postgresql-17-aggs-for-vecs # PG 17
apt install -y postgresql-16-aggs-for-vecs # PG 16
apt install -y postgresql-15-aggs-for-vecs # PG 15
apt install -y postgresql-14-aggs-for-vecs # PG 14
创建扩展:
CREATE EXTENSION aggs_for_vecs;
用法
提供将数组视为向量的聚合函数,跨多行计算按位置的统计量。支持 SMALLINT、INTEGER、BIGINT、REAL 和 DOUBLE PRECISION 类型。
CREATE EXTENSION aggs_for_vecs;
聚合函数
| 函数 | 说明 |
|---|---|
vec_to_count(anyarray) | 每个位置的非空计数 |
vec_to_sum(anyarray) | 每个位置的求和 |
vec_to_min(anyarray) | 每个位置的最小值 |
vec_to_max(anyarray) | 每个位置的最大值 |
vec_to_mean(anyarray) | 每个位置的平均值(返回 FLOAT[]) |
vec_to_weighted_mean(values, weights) | 每个位置的加权平均值 |
vec_to_var_samp(anyarray) | 每个位置的样本方差 |
vec_to_first(anyarray) | 每个位置的第一个非空值(配合 ORDER BY 使用) |
vec_to_last(anyarray) | 每个位置的最后一个非空值(配合 ORDER BY 使用) |
hist_2d(x, y, ...) | 二维直方图 |
hist_md(vals, indexes, ...) | N 维直方图 |
非聚合函数
| 函数 | 说明 |
|---|---|
vec_add(l, r) | 逐元素加法 |
vec_sub(l, r) | 逐元素减法 |
vec_mul(l, r) | 逐元素乘法 |
vec_div(l, r) | 逐元素除法 |
vec_elements(array, indexes) | 按指定索引选取元素 |
pad_vec(array, length) | 用 NULL 扩展数组至指定长度 |
vec_coalesce(array, default) | 将 NULL 替换为默认值 |
vec_trim_scale(numeric[]) | 去除 NUMERIC 元素的尾部零 |
vec_without_outliers(vals, mins, maxs) | 将异常值替换为 NULL |
示例
-- 跨行按位置取最小值
SELECT vec_to_min(vals) FROM (VALUES
(ARRAY[1,2,3,4]),
(ARRAY[5,0,-5,0]),
(ARRAY[3,6,0,9])
) AS t(vals);
-- {1,0,-5,0}
-- 按位置求平均值
SELECT vec_to_mean(vals) FROM my_table;