Comportamiento array_agg

From: "Jorge Tornero" <jorge(dot)tornero(at)cd(dot)ieo(dot)es>
To: "pgsql-es-ayuda" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Comportamiento array_agg
Date: 2010-11-11 07:38:09
Message-ID: 1289461402.20981.15.camel@linux-lqqb.site
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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;

Pero el problemón surge porque la nueva columna proveniente del
array_arg sale desordenada en este caso, mientras que sin el cruce con
la tabla de especies salía perfectamente ordenada.

¿Cómo se podría cambiar este comportamiento?

Un saludo y gracias a todos.
--
-----------------------------------------
Jorge Tornero Núñez
Centro Oceanográfico de Cádiz
Instituto Español de Oceanografía
Puerto Pesquero - Muelle de Levante, s/n
11006 Cádiz - España
Tel. +34 956294189
Fax. +34 956294232
www.ieo.es

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Cesar Martin 2010-11-11 11:00:47 Re: Uso de memoria en Postgres 8.3
Previous Message Alvaro Herrera 2010-11-10 21:21:25 Re: nombre del servicio de postgresql en windows.