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
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 |