Imagine a seguinte saida de um SELECT:
              | Cod |         Banco |         Cod. das Agências |      
             | 001 |         Banco do Brasil |         03996,34096,03816 |      
             | 104 |         Caixa Economica Federal |         12212,03996 |      
             | 237 |         Bradesco |         00833 |      
             | 422 |         Sicredi |         0153, 0300, 0500 |      
   
  Pergunto: Como obter a coluna com os Códigos das Agências concatenados e separados por virgula?
  1ª solução “na base da força bruta”:
  SELECT B.CODIGO,
       B.NOME,
       COALESCE((SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1),'') ||
       COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 1), '') ||
       COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 2), '') ||
       COALESCE(',' || (SELECT AGENCIA FROM AGENCIA A WHERE A.BANCO = B.CODIGO LIMIT 1 OFFSET 3), '')       
  FROM BANCO B
  ORDER BY 1,3
Até que a solução acima funciona, porém pouco eficiente, e com limitações, no caso limitado a 4 agências.
2ª solução  “o ideal”:
SELECT B.Codigo, 
       B.Nome, 
       ARRAY_TO_STRING(Array(
             SELECT A.Agencia::VARCHAR 
               FROM Agencia A
              WHERE A.Banco = B.Codigo
            ),',') AS Agencias
  FROM Banco B
Agora sim, temos uma solução mais eficiente, e sem limite de agências.