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
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 |