string_agg函数中的Postgresql限制

时间:2015-03-18 23:07:57

标签: postgresql postgresql-9.3

我的查询如下:

SELECT string_agg(sn::text, ','), product_id
  FROM irmsapp_serializedinventory
  group by product_id;

结果是汇总的sno字段和产品。我想知道我们是否可以将连接数限制为5并将其余部分留给sno字段。目前我的sno字段是一个很大的列表,我想将它减少到5个元素的列表(排序顺序中的前5个元素)。

1 个答案:

答案 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定义了排序顺序,以及定义聚合中使用哪五行的内容。