Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Bases de Datos => Mensaje iniciado por: Servia en 18 Marzo 2013, 20:06 PM

Título: Varias dudas Postgresql
Publicado por: Servia en 18 Marzo 2013, 20:06 PM
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í.

Título: Re: Varias dudas mySQL y Postgresql
Publicado por: 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 ?
Título: Re: Varias dudas mySQL y Postgresql
Publicado por: Servia en 18 Marzo 2013, 22:21 PM
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.
Título: Re: Varias dudas Postgresql
Publicado por: Carloswaldo en 9 Abril 2013, 23:34 PM
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;