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

Consulta a la base de datos

Estas en el tema de Consulta a la base de datos en el foro de Mysql en Foros del Web. Hola, que tal? Tengo una pequeña duda con respecto a consultas a la base de datos. Necesito saber el total de un compras por meses ...
  #1 (permalink)  
Antiguo 06/07/2011, 06:37
 
Fecha de Ingreso: julio-2011
Mensajes: 2
Antigüedad: 12 años, 9 meses
Puntos: 0
Consulta a la base de datos

Hola, que tal?
Tengo una pequeña duda con respecto a consultas a la base de datos. Necesito saber el total de un compras por meses de un cierto año. Seria algo como esto:
Enero - Febrero - Marzo..... Diciembre - Año
150.000 300.000 175.000... 200.000 2011

Se que puedo hacerlo con varios selects que me traigan la cantidad por mes. Pero lo tengo que hacer uno por cada mes y me queda un código muy largo:
Select distinct
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 1 ) as 'Enero',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 2 ) as 'Febrero',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 3 ) as 'Marzo',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 4 ) as 'Abril',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 5 ) as 'Mayo',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 6 ) as 'Junio',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 7 ) as 'Julio',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 8 ) as 'Agosto',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 9 ) as 'Setiempbre',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 10 ) as 'Octubre',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 11 ) as 'Noviembre',
(select sum(cantdocumentos) from movimiento where month(fecha_entrada) = 12 ) as 'Diciembre',
year(fecha_entrada)as 'Año'
from movimiento

Alguien sabe si no hay un método para realizar los selects de la suma con una sola consulta dinámica, o algo que sea más corto??
Les agradecería mucho su ayuda.
  #2 (permalink)  
Antiguo 06/07/2011, 07:01
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: Consulta a la base de datos

¡Qué ganas de complicarte la vida con subconsultas!
Código MySQL:
Ver original
  1.     SUM(IF(MONTH(fecha_entrada) = 1, cantdocumentos, 0)) Enero,
  2.     SUM(IF(MONTH(fecha_entrada) = 2, cantdocumentos, 0)) Febrero,
  3.     SUM(IF(MONTH(fecha_entrada) = 3, cantdocumentos, 0)) Marzo,
  4.     SUM(IF(MONTH(fecha_entrada) = 4, cantdocumentos, 0)) Abril,
  5.     SUM(IF(MONTH(fecha_entrada) = 5, cantdocumentos, 0)) Mayo,
  6.     SUM(IF(MONTH(fecha_entrada) = 6, cantdocumentos, 0)) Junio,
  7.     SUM(IF(MONTH(fecha_entrada) = 7, cantdocumentos, 0)) Julio,
  8.     SUM(IF(MONTH(fecha_entrada) = 8, cantdocumentos, 0)) Agosto,
  9.     SUM(IF(MONTH(fecha_entrada) = 9, cantdocumentos, 0)) Setiembre,
  10.     SUM(IF(MONTH(fecha_entrada) = 10, cantdocumentos, 0)) Octubre,
  11.     SUM(IF(MONTH(fecha_entrada) = 11, cantdocumentos, 0)) Noviembre,
  12.     SUM(IF(MONTH(fecha_entrada) = 12, cantdocumentos, 0)) Diciembre,
  13.     YEAR(fecha_entrada) `Año`
  14. FROM movimiento
Las subconsultas en el SELECT o en el WHERE deben ser siempre el último recurso, ya que se ejecutan una vez por cada registro que el FROM retorna. Esto implica que si tuvieses 10.000 registros, cada uno se ejecutaría otras tantas veces.
El ejemplo que te pongo hace una barrida total de la tabla y suma.

Tip adicional: El AS es opcional. Se eliminó del estándar hace años y se conserva por compatibilidad, pero ya no es requisito.
__________________
¿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 06/07/2011, 07:23
 
Fecha de Ingreso: julio-2011
Mensajes: 2
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Consulta a la base de datos

Si.. ya se, es que no encontraba otra forma de hacer.. muchisimas gracias.. =)
  #4 (permalink)  
Antiguo 06/07/2011, 07:25
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: Consulta a la base de datos

Por nada.


keep it simple
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: 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 06:31.