Varias dudas Postgresql

Iniciado por Servia, 18 Marzo 2013, 20:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Servia

1-.Tengo un array en una tabla y quiero hacer un AVG de sus valores:
¿cómo se une un array (implode) pero en el propio sql?
SELECT AVG(IMPLODE(',',campo_array)) FROM ....

¿cómo demonios era? recuerdo que se podía hacer, sino alguna otra idea?

2-. ¿Cómo actualizo un objeto en postgresql?
Tabla
-curso: contiene el objeto tutor, el cual tiene el atributo horas_lectivas.

UPDATE curso SET tutor.horas_lectivas=tutor.horas_lectivas+2;

Me marca que intenta usar tutor como si fuera una tabla, y claro está, no es así.


Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Servia

Cita de: Shell Root en 18 Marzo 2013, 20:33 PM
:http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat ?

Erré al indicar mySQL, la duda también va dirigida a postgresql.
He probado cosas como:
-array_to_string
-string_agg
-array_append
-array_agg

parece que nada cuela al ser un array que es atributo de un objeto y no una columna.

Carloswaldo

#3
Para el caso 1 ¿es necesario tener estos datos en un array? ¿por qué no en columnas separadas? En todo caso podrías resolverlo creando una función:

Código (sql) [Seleccionar]
create or replace function promedio_array(numeros int[])
returns numeric as $$
declare
promedio numeric;
suma int;
numero int;
begin
suma = 0;
foreach numero in array numeros
loop
suma = suma + numero;
end loop;
promedio = suma::numeric / array_length(numeros,1);
return promedio;
end;
$$ LANGUAGE plpgsql;


Y luego haciendo la consulta:

Código (sql) [Seleccionar]
select avg(promedio_array(numero)) from tabla;

Para el caso 2, no estoy seguro de a qué te refieres, pero creo que lo que quieres hacer es:

Código (sql) [Seleccionar]
UPDATE curso.tutor SET horas_lectivas=horas_lectivas+2;