sql - Postgres plpgsql 聚合函数过滤每个组的长度
问题描述
求plpgsql聚合函数帮助,不知道能不能实现。在此先感谢您的帮助
Table
_id group_id content num len
0 2 tab 1 3
1 2 name 2 4
2 1 tag 1 3
3 1 bag 2 3
4 1 a 3 1
5 2 b 3 1
6 1 bo 4 2
7 2 an 4 2
我想实现一个聚合函数根据group_id进行聚合,num是按排序顺序处理的,然后在函数中判断len是否小于等于2就跳过,然后每次返回指定长度的数据聚合。
example:
with sorted_table as(select * from Table order by num)
select my_func(content, len, 2(required_num)) from sorted_table group by group_id;
expect result
_id group_id content num len
0 2 tab 1 3
1 2 name 2 4
2 1 tag 1 3
3 1 bag 2 3
比如需要对每组的前10名(required_num)进行排序,按照每组的num排序,依次比较前10名的内容。如果相似度太高(我可以使用select相似度判断),过滤掉,以此类推达到每组10个Claim。也可能是这个
group_id result
2 [{"num":1,"content":"tab","len":3,"_id":0},{"num":2,"content":"name","len":4,"_id":1}]
1 [{"num":1,"content":"tag","len":3,"_id":2},{"num":2,"content":"bag","len":3,"_id":3}]
解决方案
据我了解这个问题,您实际上并不需要自定义聚合:
select group_id,
jsonb_agg(t) filter (where len <= 2) as result
from the_table t
group by group_id;
推荐阅读
- python - 在 python 中可视化一个巨大的相关矩阵
- python - 裁剪特定颜色区域(Python + OpenCV)
- javascript - 在SVG中旋转弧
- python - 在没有数学的情况下,如何在 Python 中接受多个输入并检查它是否是一个完美的正方形?
- angular - 是否可以通过 Angular 9 编译乳胶文档?
- rust - Rust - 如何返回不同函数的错误?
- json - jq 命令在尝试根据 JSON 文件的键获取值时返回空输出
- flutter - 如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?
- reactjs - Chakra UI 在单个组件中使用多个模型
- python - 访问 Oauth 令牌时得到 400 响应