Re: Optimizar consulta

From: Ricardo Fuentes Pereira <rfuentesp(at)gmail(dot)com>
To: "Mauricio Zea (Gmail)" <jmzlbqcol(at)gmail(dot)com>
Cc: Mario Soto Cordones <msotocl(at)gmail(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Optimizar consulta
Date: 2005-05-20 20:30:27
Message-ID: 428E48E3.7000208@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Mauricio Zea (Gmail) escribió:

> claro... para el lenguaje de programacion es totalmente indiferente si
> es una tabla o es una vista..
> Recuerda que una vista es como decir "una tabla virtual" compuesta por
> datos de varias tablas.
>
> No se si está bien empleado el termino virtual, pero quise decir :
> "una vista es como una tabla de mentiritas..."
>
> O mejor aun, es una TABLA LOGICA, y se accede a ella como si fuera una
> tabla normal.

Uhmmm. Desconocia por completo lo que son las vistas. Son muy potentes.
Ahora lo que queda es declarar la consulta de manera que entregue todos
los datos y que no sume valores que alteran la informacion.

Cito la SQL y la descripcion del problema del mensaje original:

SELECT *
FROM (
SELECT * ,
(fact.compra.sum_valor_fc + fact_gasto.sum_valor_fg) AS sum_valor
FROM sx_prov prov,
-- fact_compra
-- recorro la tabla sx_fact_compra segun el rut
-- para obtener a cuanto ascienden las factura de compra
(
SELECT COALESCE(SUM(valor_neto * (1 + valor_iva)), 0) AS
sum_valor_fc
FROM sx_fact_compra
WHERE rut = $1
) AS fact_compra,
-- fact_gasto
-- analogo a la sx_fact_compra
(
SELECT COALESCE(SUM(valor_neto * (1 + valor_iva)), 0) AS
sum_valor_fg
FROM sx_fact_gasto
WHERE rut = $1
) AS fact_gasto
WHERE prov.rut = $1
GROUP BY
--- los GROUP BY necesarios
) AS tabla
ORDER BY sum_valor DESC

-- fin cita

Lo que trate de hacer esa vez para devolver todos las filas (y no solo
una dado el rut) fue, en cada uno de los select anidados para facturas,
entregar el rut, y agrupar por el rut tambien, para finalmente en los
where afuera, hacer un join con sx_prov segun rut.

Me quedo algo asi:

SELECT *
FROM (
SELECT * ,
(fact.compra.sum_valor_fc + fact_gasto.sum_valor_fg) AS sum_valor
FROM sx_prov prov,
-- fact_compra
-- recorro la tabla sx_fact_compra segun el rut
-- para obtener a cuanto ascienden las factura de compra
(
SELECT rut, COALESCE(SUM(valor_neto * (1 + valor_iva)), 0)
AS sum_valor_fc
FROM sx_fact_compra
GROUP BY rut
) AS fact_compra,
-- fact_gasto
-- analogo a la sx_fact_compra
(
SELECT rut, COALESCE(SUM(valor_neto * (1 + valor_iva)), 0)
AS sum_valor_fg
FROM sx_fact_gasto
GROUP BY rut
) AS fact_gasto
WHERE prov.rut = fact_compra.rut
AND prov.rut = fact_gasto.rut
GROUP BY
--- los GROUP BY necesarios
) AS tabla
ORDER BY sum_valor DESC

Pero al recuperarla me entrega sumas erroneas. ¿Alguna idea de por que
ocurre esto?
¿Cual tendria que ser la consulta?

Salu2

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Mauricio Zea (Gmail) 2005-05-20 20:37:29 Re: Problemas para configurar el pg_hba.conf
Previous Message Ing. Jhon Carrillo 2005-05-20 20:26:32 Re: Ayuda con fechas