我的查询如下:
SELECT string_agg(sn::text, ','), product_id
FROM irmsapp_serializedinventory
group by product_id;
结果是汇总的sno
字段和产品。我想知道我们是否可以将连接数限制为5并将其余部分留给sno
字段。目前我的sno
字段是一个很大的列表,我想将它减少到5个元素的列表(排序顺序中的前5个元素)。
答案 0 :(得分:2)
关系数据库中的行 不 "已排序"。您需要有一些列,您可以通过该列对结果进行排序,然后您可以指定哪些行是"前五个"。
假设你有例如一个created_at
列定义了"前五个",你可以这样做:
select string_agg(sno::text, ','), product_id
from (
select product_Id, sno,
row_number() over (partition by product_id order by created_at desc) as rn
from irmsapp_serializedinventory
) t
where rn <= 5
group by product_id;
每个产品选择5行 。如果您只想要5行而不管product_id
,那么只需删除窗口函数中的partition by product_id
即可。
order by created_at desc
定义了排序顺序,以及定义聚合中使用哪五行的内容。