SELECT string_agg(tag, ', ') AS tags
FROM (
SELECT DISTINCT tag
FROM tbl
-- ORDER BY tag -- optionally order to get deterministic result
**LIMIT 123** -- add your limit here
) sub;
select postid, string_agg(distinct(tag), ', ')
from table t
group by postid
然后你可以这样做:
select postid, string_agg(distinct (case when seqnum <= 10 then tag end), ', ')
from (select t.*, dense_rank() over (partition by postid order by tag) as seqnum
from table t
) t
group by postid
Select
primaryID,
String_Agg(email, '|') As Email
From
contacts
Where
contactID In (Select filter.contactID
From contacts filter
Where filter.primaryID = contacts.primaryID
Order By filter.contactID)
Group By
primaryID;
5条答案
按热度按时间uqzxnwby1#
还有两个办法
1.从行中创建一个数组,限制它,然后连接成字符串:
(“array[1:3]”表示:从数组中取1到3的项)
1.将行无限制地连接成字符串,然后使用“substring”来修剪它:
如果你知道你的“标签”字段不能包含
,
字符,那么你可以选择第n次出现,
之前的所有文本这个子字符串将选择3个或更少的字符串除以
,
。要排除尾随的,
,只需添加rtrim
:nzrxty8p2#
要 “限制以下
string_agg()
中的元素数量“,请在子查询中使用LIMIT
:子查询对于性能来说根本没有问题。相反,这通常更快,即使你没有对
LIMIT
施加最大数量,因为聚合函数中的分组DISTINCT
比在子查询中一次对所有行执行它更昂贵。或者,获取 “100个最常见的标签”:
mwngjboj3#
我不知道你可以在
string_agg()
函数中限制它。您可以通过其他方式限制它:然后你可以这样做:
rt4zxlrg4#
将
string_agg
子句嵌套在split_part
中,包括作为第二个参数的string_agg
,以及作为最后一个参数的所需元素数。就像这样:kq4fsx7k5#
使用IN过滤
像这样: