【发布时间】:2021-01-26 14:37:29
【问题描述】:
求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}]
【问题讨论】:
-
CTE 中的
order by没用。它不保证外部选择按该顺序处理行。
标签: sql postgresql group-by postgresql-11