El día 11 de noviembre de 2010 08:38, Jorge Tornero <[email protected]> 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 - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda
