oracle listagg 结果太长
oracle listagg the outcome is too long
我正在使用 listagg()
聚合字符串值
比如有一个table是这样的:
Table1
Name Rank
Bob A
Bob B
Bob C
Tom A
Tom C
SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK
FROM Table1
我们得到结果:
Name COMRANK
Bob ABC
Tom AC
如果 COMRANK 变得太长怎么办?我可以在聚合它们之前找到 top xxx 吗?
您可以使用 window 函数对行进行排名,并将行限制为您需要的任何排名。
SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK
FROM (select
name, rank,
rank() over (partition by name order by rank) rnk
from Table1
) where rnk < 10; --some value
GROUP BY Name;
我正在使用 listagg()
聚合字符串值
比如有一个table是这样的:
Table1
Name Rank
Bob A
Bob B
Bob C
Tom A
Tom C
SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK
FROM Table1
我们得到结果:
Name COMRANK
Bob ABC
Tom AC
如果 COMRANK 变得太长怎么办?我可以在聚合它们之前找到 top xxx 吗?
您可以使用 window 函数对行进行排名,并将行限制为您需要的任何排名。
SELECT Name,LISTAGG(RANK,';') WITHIN GROUP (ORDER BY RANK) AS COMRANK
FROM (select
name, rank,
rank() over (partition by name order by rank) rnk
from Table1
) where rnk < 10; --some value
GROUP BY Name;