From: | Anthony <asotolongo(at)uci(dot)cu> |
---|---|
To: | Victor Báez <victor(dot)baez(at)mickey(dot)com(dot)py> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Consulta con Subselect |
Date: | 2012-02-03 17:16:26 |
Message-ID: | 4F2C166A.9020902@uci.cu |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
El 03/02/2012 10:36, Victor Báez escribió:
>
> Hola amigos. Tengo inconveniente por la lentitud de esta consulta si
> me podrían ayudar.
>
> Lo que hace la consulta es seleccionar todas las zonas y nos interesa
> la cant en peso de los productos, el precio total dentro de un periodo
> de fecha y según otros parámetros. Resulta que es muy lento con esta
>
> SELECT z.dizonas, z.zona, z.idvendedor,
>
> (SELECT SUM(fd.cantidad*p.peso)
>
> From facturas_detalle fd LEFF JOIN (factaru f LEFT JOIN clients c ON
> f.cliente=c.cliente) ON f.difactura=fd.factura
>
>
> LEFT JOIN productos p ON fd.codigoproducto=p.codigoproducto
>
> WHERE c.idzonas=z.idzonas AND f.fecha between ?fecha1_p1 AND fecha1_p1
> )::numeric (18,4) as peso_total_periodo1,
>
> (SELECT SUM(fd.cantidad*p.peso)
>
> From facturas_detalle fd LEFF JOIN (factaru f LEFT JOIN clients c ON
> f.cliente=c.cliente) ON f.difactura=fd.factura
>
>
> LEFT JOIN productos p ON fd.codigoproducto=p.codigoproducto
>
> WHERE c.idzonas=z.idzonas AND f.fecha between ?fecha1_p2 AND fecha1_p2
> )::numeric (18,4) as peso_total_periodo2
>
> FROM zonas z
>
> GROUP BY z.dizonas, z.zona, z.idvendedor
>
> ORDER BY z.idzonas
>
> Notese que aqui ay 2 subconsulta para 2 columna solo para peso de
> diferente periodo y si quiero agregar importe, cantidad en undad me
> aumentara en 6 subconsulta.
>
> Tablas usadas
>
> Zonas
>
> Clientes
>
> Factura -- Encabezado
>
> Factura_detalle
>
> Productos
>
> Ay otras tablas mas pero probando con esto ya es lento, pienso que por
> los sub select que hace para cada columna que va agregando,
>
> Mi pregunta es si ay alguna forma de traer varias columna de una vez
> en una sola subconsulta.
>
> Haciendo directo from facturas_detalle y voy agregando los join es
> rápido pero solo me trae la zona que tienen ventas y yo necesito que
> me traiga todas las zonas por mas q no tenga venta
>
>
>
> <http://www.antiterroristas.cu/>
Utiliza la clausula with (ver en la doc detalles) , he obtenido buenos
tiempos de respuestas (pero muy bueno :D) en consultas con subconsultas
en los atributos del select
algo asi:
with subconsulta as (
SELECT c.idzonas, SUM(fd.cantidad*p.peso)
From facturas_detalle fd LEFF JOIN (factaru f LEFT JOIN clients c ON
f.cliente=c.cliente) ON f.difactura=fd.factura
LEFT JOIN productos p ON fd.codigoproducto=p.codigoproducto
WHERE f.fecha between ?fecha1_p1 AND fecha1_p1 )::numeric (18,4)
group by c.idzonas
select algo from zona (aqui haces el join con la consulta que te
devuelve el with "subconsulta" por el atributo idzonas) where "tus
condiciones"
saludos
Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
http://www.antiterroristas.cu
http://justiciaparaloscinco.wordpress.com
From | Date | Subject | |
---|---|---|---|
Next Message | Eduardo Arenas C. | 2012-02-03 18:00:32 | Re: Consulta con Subselect |
Previous Message | Victor Báez | 2012-02-03 14:36:38 | Consulta con Subselect |