Nueva pregunta

Pregunta:

Fecha: 13-11-2015 06:46:54 (En Español)

problema con el group by[Resuelta]

Buenos dias comunidad ,

le comento a ayer hice una consulta mysql

les comento tengo 2 tablas una se llama agreso y el otro egreso_parcial

en egreso parcial se va guardando los registro casa vez q pagan

se puede pagar el total
se puede pagar en partes


tengo 2 egreso con estas caracteristicas


tabla : egreso
cod_Egreso | pago_proveedor

1 | 1000
2 | 1500


ahora yo decido pagar el primer egreso en 2 partes y el segundo egreso solo en 1

el primer egreso pague en 2 partes
----------------------------------------------
700
300
que sumando da a 1000

el segundo egreso decidi pagar en una parte
-----------------------------------------------------------

1500


expongo como quedaria mi tabla egreso_parcial

tabla : egreso_parcial

codigo_parcial | cod_egreso | monto| concepto
1 | 1 | 700 | 28
2 | 1 | 300 | 28
3 | 2 | 1500 | 28


expongo mi consulta

select eg.cod_egreso, eg.pago_proveedor from egreso eg join tabla egreso_parcial epa on eg.cod_egreso=epa.cod_egreso
where epa.concepto=28

y como resultado me da esto

1 | 1000
1 | 1000
2 | 1500


en si yo quiero la suma para esto hago esto

select eg.cod_egreso,sum(eg.pago_proveedor) as totales from egreso eg join tabla egreso_parcial epa on eg.cod_egreso=epa.cod_egreso
group by epa.concepto


y como resultado me sales esto

totales
3500

en si yo quiero que me salga 2500 el para esto hice esto
select distinct(eg.cod_egreso),(eg.pago_proveedor) , concepto from egreso eg join tabla egreso_parcial epa on eg.cod_egreso=epa.cod_egreso

y como resultado me sales esto

cod_egreso | pago_proveedor | concepto
1 | 1000 | 28
2 | 1500 | 28

entonces pense que ya habia solociando entonces aumente mi sum , y el group by esperando q el total me salga 2500 que seria la suma de 1000 + 1500

entonces hice esto

select distinct(eg.cod_egreso),sum(eg.pago_proveedor) as totales, concepto from egreso eg join tabla egreso_parcial epa on eg.cod_egreso=epa.cod_egreso group by concepto

y como resultado me salio el total 3500

al parecer cuando haces un group by no respeta el distinct , alguien que me pueda ayudar , gracias


entonces decidi hacer estoo

como tenia mi consulta q me devolvia

select distinct(eg.cod_egreso),(eg.pago_proveedor) , concepto from egreso eg join tabla egreso_parcial epa on eg.cod_egreso=epa.cod_egreso

y como resultado me sales esto

cod_egreso | pago_proveedor | concepto
1 | 1000 | 28
2 | 1500 | 28


hice esto


 
$listado = $obj->totales();

$total = 0;
foreach($listado as $r){
$total+=$r["pago_proveedor"];
}


pero no veo q la solucion sea por ahii no me explico porque el group by no hae caso al distinct :(



Etiquetas: HTML - MySQL - PHP - Pregunta Votos: 0 - Respuestas: 16 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 13-11-2015 09:10:58 Prueba lo siguiente:

    SELECT
        eg.cod_egreso,
        SUM(eg.pago_proveedor),
        concepto
    FROM 
        egreso eg JOIN egreso_parcial epa
        ON eg.cod_egreso=epa.cod_egreso
    WHERE
        epa.concepto=28
    GROUP BY epa.cod_egreso;
    
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:17:29 Si agregas un alias ya obtienes el resultado como lo quieres:

    SELECT
        eg.cod_egreso,
        SUM(eg.pago_proveedor) AS pago_proveedor,
        concepto
    FROM 
        egreso eg JOIN egreso_parcial epa
        ON eg.cod_egreso=epa.cod_egreso
    WHERE
        epa.concepto=28
    GROUP BY epa.cod_egreso;
    


    Arroja:

    cod_egreso | pago_proveedor | concepto
    1 | 2000 | 28
    2 | 1500 | 28

    Espero te sirva,

    Saludos!
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:28:55 Si esto no te sirve y quieres que te ayude un poco más entra aquí , modifica lo que necesites y comparte la liga resultante.   Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:39:57 Hola Ernesto en si lo que necesito es agrupar por concepto ya q necesito la suma de todos los egresos por conceptos

    mira haz un group by por concepto y veras que la suma sale 3500 :(
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:40:21 mira
    http://sqlfiddle.com/#!9/dcdfd/7
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:41:48 esto es con distinct

    enlace
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 09:43:40 ahora por concepto si te das cuenta sin usar el group by sale 2 registro uno de 1000 y el otro por 1500
    y ambos son del concepto 28 , entonces si agrupamos por concepto deberia salir 2500 , pero la consulta sale 3500 :(

    enlace

    saludos
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 10:07:53 Ah ok,
    Intenta con este:

    SELECT
        eg.cod_egreso,
        SUM(epa.monto) AS pago_provedor,
        concepto
    FROM
        egreso eg JOIN egreso_parcial epa ON eg.cod_egreso = epa.cod_egreso
    WHERE
        epa.concepto=28
    GROUP BY
        epa.concepto;
    
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 10:33:40 Hola ernesto en si mis egresos manejan mas conceptos el ejemplo que puse es con respecto al concepto 28 , pero en si quiero agrupar por conceptos y obtener los totales

    por eso que no hago el where , no se si me dejo entender , no entiendo porque cuando hace el group by sucede esto :(
      Votos: 2 - Link respuesta
     
  • Fecha: 13-11-2015 10:34:42 en si yo puedo hacer una consulta obteniendo los conceptos y dentro de un foreach pasar el concepto a la consulta pero no quiero hacer eso lo veo innecesario   Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 11:21:44 Le puedes quitar el WHERE y funciona como quieres.
    A mi ya me regresa así:
    cod_egreso|pago_provedor|concepto
    ----------+-------------+--------+
    1         |2500         |28
    
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 11:31:47 De hecho puedes hacer un subselect que hace exactamente lo que quieres:

    SELECT
        cod_egreso,
        SUM(pago_proveedor),
        concepto
    FROM
      (SELECT
        DISTINCT eg.cod_egreso,
        eg.pago_proveedor,
        epa.concepto
      FROM
        egreso eg JOIN egreso_parcial epa ON eg.cod_egreso = epa.cod_egreso) alias_subselect
    GROUP BY
        concepto;
    
      Votos: 2 - Link respuesta
     
  • Fecha: 13-11-2015 12:08:17 Hola ernesto en si veo q estas sumando el campo monto del parcial es por eso que te sale pero si sumas el monto de la tabla egreso no

    medio raro que cuando ejecutas la consulta te sale 2 registros uno de 1500 y el otro de 2000 ambos son de concepto 28 en teoria si hago un group by por concepto y un sum al campo monto de la tabla egreso deberia de salir 2500 , y sale 3500
      Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 12:28:08 La última ya sirve   Votos: 0 - Link respuesta
     
  • Fecha: 13-11-2015 13:32:35 Gracias Ernesto doy por resuelta la pregunta saludos   Votos: 1 - Link respuesta
     
  • Fecha: 13-11-2015 13:57:11 De nada, estamos para ayudar.

    Saludos!
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com