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

[SOLUCIONADO] Sumar por grupo

Estas en el tema de Sumar por grupo en el foro de Mysql en Foros del Web. Hola a todos tengo la siguiente consulta de acuerdo a los ids... muestra los movimientos que corresponde a las fechas y las agrupo por "grupo" ...
  #1 (permalink)  
Antiguo 16/09/2014, 20:41
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Sumar por grupo

Hola a todos tengo la siguiente consulta de acuerdo a los ids... muestra los movimientos que corresponde a las fechas y las agrupo por
"grupo" y saco el total de mi consulta todo bien , pero necesito sacar el subtotal por grupo para despues sacar el total final...
pero no tengo idea de como se puede hacer
Código SQL:
Ver original
  1. SELECT l.grupo,l.modalidad, SUM(i.pago)  pago, conceptotext
  2. FROM movimientos AS i, grupos AS l
  3.  WHERE  i.id=l.movimiento AND
  4.  (i.fecha BETWEEN '$fecha01' AND '$fecha02')
  5. AND movimiento IN (" . implode(', ', $ids) . ")GROUP BY l.grupo

Última edición por gnzsoloyo; 17/09/2014 a las 05:44 Razón: Legibilidad
  #2 (permalink)  
Antiguo 17/09/2014, 05:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Sumar por grupo

GROUP BY .... WITH ROLLUP
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 17/09/2014, 11:47
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

Gracias amigo ya lo pude resolver con lo q aportaste solo tengo una duda... en la suma por grupo...
me sale el nombre del grupo ejemplo
aaa 500
aaa 900
aaa 1400 (suma grupo a)

bb 100
bb 300
bb 400 (suma grupo b)
bb 1800(suma grupo a +b)


como puedo omitir el grupo ... y al final cambiarlo por Total final????

lo tengo en un while
  #4 (permalink)  
Antiguo 17/09/2014, 11:49
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 6 meses
Puntos: 1
Exclamación Respuesta: Sumar por grupo

Espero que te ayude con este ejemplo, no me acuerdo de donde lo obtuve.
Cita:
Editado: Violacion general de las PDU (2.3)

Última edición por gnzsoloyo; 17/09/2014 a las 12:05
  #5 (permalink)  
Antiguo 17/09/2014, 11:53
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

Gracias chicos ya tengo la suma por grupo
Gracias amigo ya lo pude resolver con lo q aportaste solo tengo una duda... en la suma por grupo...
me sale el nombre del grupo ejemplo
aaa 500
aaa 900
aaa 1400 (suma grupo a)

bb 100
bb 300
bb 400 (suma grupo b)
bb 1800(suma grupo a +b)


solo quiero ponerle suma final antes de 1800 pero no encuentro como
  #6 (permalink)  
Antiguo 17/09/2014, 12:06
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Sumar por grupo

Es un momento Leo, ayudo a una persona con un caso similar, te lo pongo, ojalá te ayude, a mi si me sirvio mucho

Código SQL:
Ver original
  1. mysql> SELECT YEAR, country, product, SUM(profit)
  2.     -> FROM sales
  3.     -> GROUP BY YEAR, country, product WITH ROLLUP;
  4. +------+---------+------------+-------------+
  5. | YEAR | country | product    | SUM(profit) |
  6. +------+---------+------------+-------------+
  7. | 2000 | Finland | Computer   |        1500 |
  8. | 2000 | Finland | Phone      |         100 |
  9. | 2000 | Finland | NULL       |        1600 |
  10. | 2000 | India   | Calculator |         150 |
  11. | 2000 | India   | Computer   |        1200 |
  12. | 2000 | India   | NULL       |        1350 |
  13. | 2000 | USA     | Calculator |          75 |
  14. | 2000 | USA     | Computer   |        1500 |
  15. | 2000 | USA     | NULL       |        1575 |
  16. | 2000 | NULL    | NULL       |        4525 |
  17. | 2001 | Finland | Phone      |          10 |
  18. | 2001 | Finland | NULL       |          10 |
  19. | 2001 | USA     | Calculator |          50 |
  20. | 2001 | USA     | Computer   |        2700 |
  21. | 2001 | USA     | TV         |         250 |
  22. | 2001 | USA     | NULL       |        3000 |
  23. | 2001 | NULL    | NULL       |        3010 |
  24. | NULL | NULL    | NULL       |        7535 |
  25. +------+---------+------------+-------------+

Los elementos marcados con ROJO representan el subtotal por año y pais. Los elementos marcados con Verde representan el subtotal por año, y finalmente el marcado como Azul representa el total-total
  #7 (permalink)  
Antiguo 17/09/2014, 12:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Sumar por grupo

Cita:
Iniciado por Briss Ver Mensaje

solo quiero ponerle suma final antes de 1800 pero no encuentro como
Postea la sintaxis extacta y real de la query que usas.
El método de lograrlo es muy simple, pero necesitamos ver sobre qué campos nos apoyaremos para lograrlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/09/2014, 12:10
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Sumar por grupo

Puedes manipular sin ningún problemas las etiquetas NULL para colocar el texto que tengas, lo puedes hacer de varias maneras, la más sencilla sería con IFNULL, aunque podrías también hacerlo con IF o con un CASE-WHEN. continuando con el ejemplo que aparece en la documentación tú podrías hacer algo como esto:
Código:
Código SQL:
Ver original
  1. SELECT
  2. IFNULL(YEAR, 'Total General') YEAR,
  3. IF(country IS NULL, 'Subtotal por Año', country) country,
  4. CASE WHEN product IS NULL THEN 'Subtotal por pais' ELSE product END product
  5. .....
  6. .....
Esto te regresaría algo así:
Código:
Código SQL:
Ver original
  1. +---------------+------------------+--------------------+-------------+
  2. | YEAR          | country | product    | SUM(profit) |
  3. +---------------+------------------+--------------------+-------------+
  4. | 2000          | Finland          | Computer           |        1500 |
  5. | 2000          | Finland          | Phone              |         100 |
  6. | 2000          | Finland          | Subtotal por pais  |        1600 |
  7. ....
  8. | 2000          | Subtotal por año | subtotal por país |        4525 |
  9. ........
  10. | Total General | Subtotal por año | subtotal por país |        7535 |
  11. +---------------+------------------+--------------------+-------------+
Obviamente podrías preferir por que en el último de los casos sólo apareciera la leyenda en la primer columna, por lo que la segunda y tercer condición deberían ser modificadas.
  #9 (permalink)  
Antiguo 17/09/2014, 12:12
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Postea la sintaxis extacta y real de la query que usas.
El método de lograrlo es muy simple, pero necesitamos ver sobre qué campos nos apoyaremos para lograrlo.
esta es mi query amigo
Código MySQL:
Ver original
  1. SELECT l.nameprograma,l.modalidad,registro.nombre, SUM(i.pago) as total, conceptotext from pagos as i,programa as l,registro
  2.  where  i.cobro=registro.id_cobro and (i.fecha BETWEEN '$fecha01' AND '$fecha02') and id_registro IN (" . implode(', ', $ids) . ")
  3. group by  l.nameprograma,i.concepto  WITH ROLLUP
  #10 (permalink)  
Antiguo 17/09/2014, 12:14
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

gerardo_goh tambien estoy leyendo esa pagina amigo checo lo del nombre a ver si me funciona gracias
  #11 (permalink)  
Antiguo 17/09/2014, 12:23
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

cheque lo del null pero no creo q sea lo mejor ya q ami me aparece el nombre del grupo registro.nombre

  #12 (permalink)  
Antiguo 17/09/2014, 12:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Sumar por grupo

NULL es el valor devuelto en modo escalonado en las columnas donde aplica la agrupación, para los registros creados de subtotales.
No es que se trate de registros reales.
Ese es un truco para determinar cuáles son los registros donde MySQL generó esas sumatorias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 17/09/2014, 12:29
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: Sumar por grupo

chicos ya me ha quedado modifique mi tabla donde visualizo desde php

gracias por su ayuda
abrazos

Etiquetas: grupo, select
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 18:56.