Re: Comportamiento array_agg

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: Jorge Tornero <jorge(dot)tornero(at)cd(dot)ieo(dot)es>
Cc: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Comportamiento array_agg
Date: 2010-11-11 11:09:46
Message-ID: AANLkTikYLPptMz-Ww7bvm2Q0HjJjaF91ZkTzHxYGSyUW@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

El día 11 de noviembre de 2010 08:38, Jorge Tornero
<jorge(dot)tornero(at)cd(dot)ieo(dot)es> escribió:
> Hola a todos y buen día,
>
> Usando array_agg he tenido el siguiente problema: Tengo una FAUNA con
> una columna PESCA y otra COD_ESPECIE, por ejemplo:
>
> PESCA COD_ESPECIE
> 1       10156
> 2       10156
> 3       10156
> 4       10152
> 5       10156
> 6       10522
> 6       10156
> 6       10152
>
> . Mi idea era obtener un listado en el que cada especie tuviera anexo
> las pescas en las que apareciera, es decir:
>
> ESPECIE Pescas
> 10156   1,2,3,5,6
> 10152   4,6
> 10522   6
>
> Para ello, después de consultar por ahí un poco, descubrí que se podía
> hacer con una consulta como esta:
>
> select especie as "Especie", array_to_string(array_agg(pesca),',') as
> "Lances en los que aparece" from fauna group by especie order by
> especie;
>
> Que efectivamente me hace perfectamente la tarea.
>
> Ahora bien, en otra tabla de ESPECIES con las columnas COD_ESPECIE y
> ESPECIE tal como:
>
> COD_ESPECIE     ESPECIE
> 10156           E. encrasicolus
> 10152           S. pilchardus
> 10522           B. boops
>
> La idea es meterla en la consulta para que en lugar del código de la
> especie me aparezca su nombre, algo como:
> ESPECIE Pescas
> E. encrasicolus  1,2,3,5,6
> S. pilchardus    4,6
> B. boops         6
>
> Eso lo hago mediante:
>
> select especies.especie as "Especie", array_to_string(array_agg(pesca),'
> ') as "Lances en los que aparece" from especies inner join fauna
> on(especies.cod_especie=fauna.especie) group by especies.especie order
> by especies.especie;
>

Hay un contrib (intarray) que te permite ordenar eficientemente lo que
te devuelve
array_agg. Mirá http://www.postgresql.org/docs/current/static/intarray.html

La función sort(int[]) es la que puede ser que necesites.

Saludos!

--
              Emanuel Calvo Franco
        DBA | www.emanuelcalvofranco.com.ar
Curso a distancia Nivel 1 Admin Postgres:
    http://www.postgresql-es.org/node/525

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Emanuel Calvo Franco 2010-11-11 11:12:41 Re: Uso de memoria en Postgres 8.3
Previous Message Cesar Martin 2010-11-11 11:00:47 Re: Uso de memoria en Postgres 8.3