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

[SOLUCIONADO] Problema con Group by sin valor

Estas en el tema de Problema con Group by sin valor en el foro de Bases de Datos General en Foros del Web. Hola amigos. tengo una tabla con movimientos de una cuenta... se ve así Siempre ocupo solo 3 cuentas (gasto fijo, sueldos y otros) Hago una ...
  #1 (permalink)  
Antiguo 11/09/2013, 12:08
Avatar de sebandrescc2  
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 4 meses
Puntos: 0
Problema con Group by sin valor

Hola amigos.

tengo una tabla con movimientos de una cuenta... se ve así



Siempre ocupo solo 3 cuentas (gasto fijo, sueldos y otros)

Hago una consulta simple para ordenar por cuentas y sumar el total de cada una en el mes 7 (julio)
Código MySQL:
Ver original
  1. SELECT costos.nombre, ABS(SUM(costos.cargo)-SUM(costos.abono)) as total_mes
  2. FROM costos
  3. WHERE month(costos.fecha)=7 AND year(costos.fecha)=2013
  4. GROUP BY costos.nombre
  5. ORDER BY costos.nombre asc

Me devuelve



Lo que quiero saber es como hacer una consulta donde siempre me devuelva las 3 cuentas que ocupo siempre, aunque no tenga movimientos ...

por ejemplo si en este mes no hay movimiento en la cuenta "otros", me duelva total_mes = 0.... ya que si la cuenta no tiene movimiento, simplemente no la muestra.

Espero que se entienda
__________________
Aquí voy a escribir mi firma
  #2 (permalink)  
Antiguo 11/09/2013, 12:15
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, 4 meses
Puntos: 2658
Respuesta: Problema con Group by sin valor

Tu problema se ha consultado muchas veces, y la cosa pasa porque una tabla no puede devolverte lo que no existe.
Si estás usando una única tabla, MySQL sólo podrá darte datos que pueden calcularse a fechas efectivamente existentes. Si no hay datos para un período dado, simplemente no saldrán.
Hay dos soluciones a tu problema:
1) Crear una tabla temporal de meses del año, y/o días del mes en cuestión. Esta tabla sólo se usará para la consulta y desaparecerá luego de cerrar la conexión. Obviamente, implica regenerarla cada vez que se requiera hacer la query.
2) Olvidarte de todo, y hacerlo en la vista en pantalla, por programación. A fin de cuentas, si el tema es visualizarlo, simplemente creas las lineas en la tabla en pantalla, cuando lo necesitas.

Se podría usar un stored procedure para encapsular esto, pero en definitiva es una forma de hacer lo mismo que se plantea entre ambas soluciones, usando una sola llamada a la base.
Claro que este último caso dependerá de tu habilidad con los SP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/09/2013, 12:33
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con Group by sin valor

tambien podrias logarlo con una tabla que fuera el catalogo de nombres haciendo un left join a esta tabla para traer los nombres que necesitas aunque las sumas esten en 0
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 11/09/2013, 15:26
Avatar de sebandrescc2  
Fecha de Ingreso: diciembre-2012
Mensajes: 45
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Problema con Group by sin valor

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tu problema se ha consultado muchas veces, y la cosa pasa porque una tabla no puede devolverte lo que no existe.
Si estás usando una única tabla, MySQL sólo podrá darte datos que pueden calcularse a fechas efectivamente existentes. Si no hay datos para un período dado, simplemente no saldrán.
Hay dos soluciones a tu problema:
1) Crear una tabla temporal de meses del año, y/o días del mes en cuestión. Esta tabla sólo se usará para la consulta y desaparecerá luego de cerrar la conexión. Obviamente, implica regenerarla cada vez que se requiera hacer la query.
2) Olvidarte de todo, y hacerlo en la vista en pantalla, por programación. A fin de cuentas, si el tema es visualizarlo, simplemente creas las lineas en la tabla en pantalla, cuando lo necesitas.

Se podría usar un stored procedure para encapsular esto, pero en definitiva es una forma de hacer lo mismo que se plantea entre ambas soluciones, usando una sola llamada a la base.
Claro que este último caso dependerá de tu habilidad con los SP.
Ok. Mi duda es si se podía lograr sin escribir codigo php. Gracias
__________________
Aquí voy a escribir mi firma

Etiquetas: bd, group, select, tabla, valor
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 23:39.