Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQL con sumas de campos (https://www.clubdelphi.com/foros/showthread.php?t=86411)

arkam20 05-08-2014 09:49:31

SQL con sumas de campos
 
Saludos a todos este es mi primer post.

Hace unas semanas comence a retomar, delphi y Mysql.

Hice una consulta y me funciona pero tengo mis dudas si sea lo correcto.

Tengo 2 tablas principales

OBRAS
id_obra
nombre_obra


BENEFICIARIOS
id_beneficiario
id_obra
nom_beneficiario

PAGOS
id_pago
id_beneficiario
importe_pago

DESCUENTOS
id_descuento
id_beneficiario
importe_desc



Por ejemplo tenemos 1 obra, con varios beneficiarios o clientes, los cuales realizan los pagos y reciben descuentos.
Lo que hice primero es hacer consulta de esa obra y mostrar los beneficiarios contenidos en una obra con toda la suma de sus pagos y descuentos.

Código SQL [-]
SELECT  bf.nom_beneficiario,
            
            (SELECT SUM(pg.importe_pago)
             FROM    pagos AS pg
             WHERE bf.id_beneficiario= pg.id_beneficiario) AS total_pagos,
            
             (SELECT SUM(dc.importe_desc)
             FROM    descuentos AS dc
             WHERE bf.id_beneficiario= dc.id_beneficiario) AS total_descuentos
   
  
FROM    beneficiario AS bf,
            obra         AS cob

WHERE   bf.id_obra= cob.id_obra
            cob.id_obra= :id_obra

La consulta funciona y realiza su cometido, pero no se si este correcto hacerlo de esta manera.

esta consulta se lleva menos del segundo en realizarse.

Hice una consulta parecida pero con mas campos y un poco mas complicada y consumio 4.5 segundos (se me hizo lenta)
la tabla de obras tiene 576 registros y beneficiarios 7000 aproximadamente.


Agradeceria sus consejos. Gracias

aposi 05-08-2014 12:41:37

mira si este SQL va mejor

Código SQL [-]
SELECT cob.id_obra,cob.nombre_obra, bf.nom_beneficiario,SUM(pg.importe_pago) AS total_pagos,SUM(dc.importe_desc) AS total_descuentos
FROM obra AS cob
left join  beneficiario AS bf on  cob.id_obra = bf.id_obra
left join  pagos AS pg on bf.id_beneficiario= pg.id_beneficiario
left join  descuentos AS dc on bf.id_beneficiario= dc.id_beneficiario
WHERE 
cob.id_obra= :id_obra

Neftali [Germán.Estévez] 05-08-2014 13:07:42

Cita:

Empezado por arkam20 (Mensaje 479742)
Saludos a todos este es mi primer post.

Hola y bienvenido al club.

Por favor revisa la guía de estilo y usa TAG's cuando escribas código.
Mejora mucho la lectura de este.


La franja horaria es GMT +2. Ahora son las 15:15:10.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi