Redondeo de decimales en PostgresSQL

Buenas tardes,
¿Alguien puede ayudarme con la siguiente tema?

Mi consulta es la siguiente acerca de como redondear a dos decimales la suma de varios registros.

Tabla: Ventas
Campo a sumar: importe
Este campo es de tipo REAL, Len=8, UILen=12 y UIDec=2

registro1=10.52
registro2=5.92
registro3=523.63697

Mi consulta sql es:

select sum(importe) from ventas

el resultado:540.07697

¿como redondear el resultado a dos digitos
quedando como: 540.08?

he utilizado la instrucciones Round(), CAST, DECIMAL y no he tenido exito, alguien sabe algo al respecto?

Gracias de antemano por la asesoria.

Saludos cordiales.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: Redondeo de decimales en PostgresSQL

Hola cestcor.

Lo mejor cuando se trabaja con importes es siempre emplear el tipo NUMERIC. De esta forma tendrás la máxima precisión posible en PostgreSQL y no tendrás problemas con el redondeo. Así pues, si por ejemplo tenemos un campo monetario que puede contener hasta 999.99 €/$ etc..., definiríamos ese campo como:

NUMERIC (5,2)

Un saludo.

Re: Redondeo de decimales en PostgresSQL

Gracias por la aclaracion.
Saludos cordiales.

Redondeo de decimales en PostgresSQL

Hola cestcor.

prueba con esto
SELECT to_char(sum(importe),'99G999.99') from ventas ;

Consulta sobre triggers

Buenos días.
Gracias por el aporte muy valioso.

Tengo una consulta:
Un trigger que debe 'dispararse' después de la actualización de una columna en una tabla.
El caso es que dentro de la función ligada al trigger, hay unas condiciones de comparación entre el nuevo valor de la columna y el valor de otra columna.

Ej:

CREATE OR REPLACE FUNCTION ActualizarEstado()
RETURNS TRIGGER AS
$ActualizarEstado$

DECLARE

BEGIN

if NEW.es_activo = 'Y' then

--Si el nuevo valor de la columna es_activo es 'Y', actualizar la columna fue_activo con 'Y' donde el id del estudiante sea igual al id del mismo en la variable NEW

update estudiante
set fue_activo = NEW.es_activo
where estudiante_id = NEW.estudiante_id;

RETURN NEW;

else

if (NEW.es_activo = 'N' and estudiante.fue_activo='Y') then

--Si el nuevo valor de la columna es_activo es 'N' y fue_activo='Y' actualizar la columna fecha_cambio_estado con now() para guardar la fecha de cambio

update adempiere.c_payment
set fecha_cambio_estado = now()
where estudiante_id = NEW.estudiante_id;
--
RETURN NEW;

end if;
end if;

END;
$ActualizarEstado$ LANGUAGE plpgsql;

CREATE TRIGGER ActualizarEstado after UPDATE
ON estudiante FOR EACH row
EXECUTE PROCEDURE ActualizarEstado();

Se genera el mensaje 'La columna fue_activo no existe'

Saludos,
Omar