Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Suma de select

Estas en el tema de Suma de select en el foro de Mysql en Foros del Web. Estimados: Tengo esta consulta mysql quiero sumar datos dentro de otros select como lo muestro, la consulta me funciona menos con lo comentado como lo ...
  #1 (permalink)  
Antiguo 15/10/2014, 12:41
 
Fecha de Ingreso: noviembre-2013
Mensajes: 13
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Suma de select

Estimados:

Tengo esta consulta mysql quiero sumar datos dentro de otros select como lo muestro, la consulta me funciona menos con lo comentado como lo puedo hacer?
Código MySQL:
Ver original
  1. /*SELECT(SUM datos.AMOUNT*/
  2.     datos . *
  3.     ((SELECT
  4.         EMP.rut as RUT,
  5.             UPPER(CONCAT(EMP.name, ' ', EMP.surname)) as NOMBRE,
  6.             DT.name as TIPO,
  7.             TTR.docId as ID,
  8.          
  9.             IFNULL(SUM(-(TTR.netAmount)), 0) as AMOUNT,
  10.             '' as MONTO_FONDO,
  11.             '' as MONTO_RENDICION,
  12.             '' as TOTAL,
  13.             DATE_FORMAT(TEX.createdDate, '%d/%m/%Y') as FECHA_CREACION,
  14.             ' ' as FECHA_PAGO,
  15.             TEX.description as DESCRIPCION
  16.     FROM
  17.         TBL_EXPENSESREPORT TEX
  18.     LEFT JOIN TBL_TRANSACTS TTR ON (TEX.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 7), TBL_DOCS_STATUS TDS, TBL_DOCS_TYPES DT, TBL_EMPLOYERS EMP
  19.     WHERE
  20.         TEX.deleted <> 1 AND DT.id = TTR.docType AND TEX.docStatus = TDS.id AND TEX.docStatus IN (3 , 5) AND TEX.created = EMP.uid AND TEX.createdDate BETWEEN '2014-09-01' AND '2014-09-30'
  21.     GROUP BY EMP.rut) UNION ALL (SELECT
  22.         PF.employerId as RUT,
  23.             UPPER(CONCAT(EMP.name, ' ', EMP.surname)) as NOMBRE,
  24.             DT.name as TIPO,
  25.             TTR.docId as ID,        
  26.             IFNULL(SUM(TTR.netAmount), 0) as AMOUNT,-
  27.             '' as MONTO_FONDO,
  28.             '' as MONTO_RENDICION,
  29.             '' as TOTAL,
  30.             DATE_FORMAT(PF.date, '%d/%m/%Y') as FECHA_CREACION,
  31.             DATE_FORMAT(PF.paymentDate, '%d/%m/%Y') as FECHA_PAGO,
  32.             PF.name as DESCRIPCION
  33.     FROM
  34.         TBL_PAYFUNDS PF
  35.     LEFT JOIN TBL_TRANSACTS TTR ON (PF.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 9), TBL_PAYFUNDSTATUS PFS, TBL_DOCS_TYPES DT, TBL_EMPLOYERS EMP
  36.     WHERE
  37.         PF.deleted <> 1 AND DT.id = TTR.docType AND PF.status = PFS.id AND PF.status = 4 AND PF.employerId = EMP.rut AND PF.date BETWEEN '2014-09-01' AND '2014-09-30'
  38.     GROUP BY PF.employerId)) as datos
  39. ORDER BY datos.rut , datos.FECHA_CREACION)) as total
  #2 (permalink)  
Antiguo 16/10/2014, 01:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Suma de select

Suponiendo que AMOUNT es un campo de esa macro query y suponiendo que funciona y no se puede simplificar, la sintaxis correcta seria

Código MySQL:
Ver original
  1. SELECT SUM(datos.AMOUNT) total FROM (...la query...) as datos;

La linea 41 es absolutamente inutil puesto que el select va a retornar un solo valor luego que sentido tiene ordenar y ademas esos campos no estaran...

Excepto que quieras agregar por esos campos

Código MySQL:
Ver original
  1. SELECT datos.rut,
  2.              datos.FECHA_CREACION,
  3.              SUM(datos.AMOUNT) total
  4. FROM (...la query...) as datos
  5. GROUP BY datos.rut , datos.FECHA_CREACION;

Creo que ya saldrá ordenada, con el total para cada rut y fecha
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 16/10/2014, 07:19
 
Fecha de Ingreso: noviembre-2013
Mensajes: 13
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Suma de select

El ultimo punto que comentaste, es el caso, quiero sacar monto por rut, no me sale lo ultimo que enviaste, tendre algo malo en mi codigo??
Código MySQL:
Ver original
  1. SELECT       datos.RUT,
  2.              datos.FECHA_CREACION,
  3.              SUM(datos.AMOUNT) total
  4. SELECT datos.* FROM (
  5.                                 (SELECT    EMP.rut as RUT,
  6.                                            UPPER(CONCAT(EMP.name,' ',EMP.surname)) as NOMBRE,
  7.                                            DT.name as TIPO,
  8.                                            TTR.docId as ID,                                          
  9.                                            IFNULL(SUM(-(TTR.netAmount)),0) as AMOUNT,                                          
  10.                                            '' as TOTAL,
  11.                                            DATE_FORMAT(TEX.createdDate,'%d/%m/%Y') as FECHA_CREACION,
  12.                                            ' ' as FECHA_PAGO,
  13.                                            TEX.description as DESCRIPCION
  14.                                  FROM      TBL_EXPENSESREPORT TEX
  15.                                            LEFT JOIN TBL_TRANSACTS TTR ON (TEX.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 7),
  16.                                            TBL_DOCS_STATUS        TDS,
  17.                                            TBL_DOCS_TYPES DT,
  18.                                            TBL_EMPLOYERS          EMP
  19.                                  WHERE     TEX.deleted <> 1
  20.                                  AND       DT.id = TTR.docType
  21.                                  AND       TEX.docStatus = TDS.id
  22.                                  AND       TEX.docStatus IN (3,5)
  23.                                  AND       TEX.created = EMP.uid      AND       TEX.createdDate BETWEEN '2014-09-01' AND '2014-09-30'      GROUP BY  EMP.rut)
  24.                                  UNION ALL(
  25.                                  SELECT    PF.employerId as RUT,
  26.                                            UPPER(CONCAT(EMP.name,' ',EMP.surname)) as NOMBRE,
  27.                                            DT.name as TIPO,
  28.                                            TTR.docId as ID,                                          
  29.                                            IFNULL(SUM(TTR.netAmount),0) as AMOUNT,                                          
  30.                                            '' as TOTAL,
  31.                                            DATE_FORMAT(PF.date,'%d/%m/%Y') as FECHA_CREACION,
  32.                                            DATE_FORMAT(PF.paymentDate,'%d/%m/%Y') as FECHA_PAGO,                              
  33.                                            PF.name as DESCRIPCION
  34.                                  FROM      TBL_PAYFUNDS PF
  35.                                            LEFT JOIN TBL_TRANSACTS TTR ON (PF.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 9),
  36.                                            TBL_PAYFUNDSTATUS PFS,
  37.                                            TBL_DOCS_TYPES DT,
  38.                                            TBL_EMPLOYERS     EMP
  39.                                  WHERE     PF.deleted <> 1
  40.                                  AND       DT.id = TTR.docType
  41.                                  AND       PF.status = PFS.id
  42.                                  AND       PF.status = 4
  43.                                  AND       PF.employerId = EMP.rut      AND      PF.date BETWEEN '2014-09-01' AND '2014-09-30'       GROUP BY  PF.employerId)
  44.                            )) as datos
  45.                       GROUP BY datos.RUT,datos.FECHA_CREACION
  #4 (permalink)  
Antiguo 17/10/2014, 01:54
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Suma de select

Cita:
no me sale lo ultimo que enviaste, tendre algo malo en mi codigo??
MySql retorna explicaciones de los errores... muestralos.

No voy a construir una base de datos para poder analizar tu query.

La parte central lo que lleva el alias "datos" muestra los datos que esperas que muestre?


Código MySQL:
Ver original
  1. SELECT       datos.RUT,
  2.              SUM(datos.AMOUNT) total
  3. SELECT datos.* FROM (
  4.                                 (SELECT    EMP.rut as RUT,
  5.                                            UPPER(CONCAT(EMP.name,' ',EMP.surname)) as NOMBRE,
  6.                                            DT.name as TIPO,
  7.                                            TTR.docId as ID,                                          
  8.                                            IFNULL(SUM(-(TTR.netAmount)),0) as AMOUNT,                                          
  9.                                            '' as TOTAL,
  10.                                            DATE_FORMAT(TEX.createdDate,'%d/%m/%Y') as FECHA_CREACION,
  11.                                            ' ' as FECHA_PAGO,
  12.                                            TEX.description as DESCRIPCION
  13.                                  FROM      TBL_EXPENSESREPORT TEX
  14.                                            LEFT JOIN TBL_TRANSACTS TTR ON (TEX.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 7),
  15.                                            TBL_DOCS_STATUS        TDS,
  16.                                            TBL_DOCS_TYPES DT,
  17.                                            TBL_EMPLOYERS          EMP
  18.                                  WHERE     TEX.deleted <> 1
  19.                                  AND       DT.id = TTR.docType
  20.                                  AND       TEX.docStatus = TDS.id
  21.                                  AND       TEX.docStatus IN (3,5)
  22.                                  AND       TEX.created = EMP.uid      AND       TEX.createdDate BETWEEN '2014-09-01' AND '2014-09-30'      GROUP BY  EMP.rut)
  23.                                  UNION ALL(
  24.                                  SELECT    PF.employerId as RUT,
  25.                                            UPPER(CONCAT(EMP.name,' ',EMP.surname)) as NOMBRE,
  26.                                            DT.name as TIPO,
  27.                                            TTR.docId as ID,                                          
  28.                                            IFNULL(SUM(TTR.netAmount),0) as AMOUNT,                                          
  29.                                            '' as TOTAL,
  30.                                            DATE_FORMAT(PF.date,'%d/%m/%Y') as FECHA_CREACION,
  31.                                            DATE_FORMAT(PF.paymentDate,'%d/%m/%Y') as FECHA_PAGO,                              
  32.                                            PF.name as DESCRIPCION
  33.                                  FROM      TBL_PAYFUNDS PF
  34.                                            LEFT JOIN TBL_TRANSACTS TTR ON (PF.id = TTR.docId AND TTR.deleted <> 1 AND TTR.docType = 9),
  35.                                            TBL_PAYFUNDSTATUS PFS,
  36.                                            TBL_DOCS_TYPES DT,
  37.                                            TBL_EMPLOYERS     EMP
  38.                                  WHERE     PF.deleted <> 1
  39.                                  AND       DT.id = TTR.docType
  40.                                  AND       PF.status = PFS.id
  41.                                  AND       PF.status = 4
  42.                                  AND       PF.employerId = EMP.rut      AND      PF.date BETWEEN '2014-09-01' AND '2014-09-30'       GROUP BY  PF.employerId)
  43.                            )) as datos
  44.                       GROUP BY datos.RUT;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: join, select, sql, suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:46.