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

Suma que me devuelva los ceros

Estas en el tema de Suma que me devuelva los ceros en el foro de Bases de Datos General en Foros del Web. Hola a todos. Observo que usando la función SUM, si hay algún registro cuya suma dé cero, no me lo presenta. Hay alguna manera de ...
  #1 (permalink)  
Antiguo 06/04/2005, 02:46
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Suma que me devuelva los ceros

Hola a todos.

Observo que usando la función SUM, si hay algún registro cuya suma dé cero, no me lo presenta. Hay alguna manera de hacer que lo presente?

Ejemplo:

Tabla productos
Id Nombre
1 Pan
2 Huevos
3 Leche
4 Azúcar

Tabla compras
Dia Producto Compras
1 1 3
2 2 5
3 1 4

Si ejecuto la consulta:
SELECT productos.Id,SUM(compras.Compras) AS Compras FROM productos,compras WHERE compras.Producto=productos.Id GROUP BY productos.Id

Obtengo los siguientes resultados:
Id Compras
1 7
2 5

Sin embargo, yo necesitaría los siguientes:
Id Compras
1 7
2 5
3 0
4 0

Espero haberme explicado bien. ¿Alguien sabe cómo hacer esto?

Gracias de antemano.

Última edición por mariogl84; 06/04/2005 a las 02:52
  #2 (permalink)  
Antiguo 06/04/2005, 03:16
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 9 meses
Puntos: 0
Cita:
Iniciado por mariogl84
Hola a todos.

Observo que usando la función SUM, si hay algún registro cuya suma dé cero, no me lo presenta. Hay alguna manera de hacer que lo presente?

Ejemplo:

Tabla productos
Id Nombre
1 Pan
2 Huevos
3 Leche
4 Azúcar

Tabla compras
Dia Producto Compras
1 1 3
2 2 5
3 1 4

Si ejecuto la consulta:
SELECT productos.Id,SUM(compras.Compras) AS Compras FROM productos,compras WHERE compras.Producto=productos.Id GROUP BY productos.Id

Obtengo los siguientes resultados:
Id Compras
1 7
2 5

Sin embargo, yo necesitaría los siguientes:
Id Compras
1 7
2 5
3 0
4 0

Espero haberme explicado bien. ¿Alguien sabe cómo hacer esto?

Gracias de antemano.

SELECT DISTINCT(productos.Id,SUM(compras.Compras) AS Compras) FROM productos,compras
WHERE compras.Producto(+)=productos.Id GROUP BY productos.Id

Si haces una left join te deberia de aparecer todos los productos y las suma de sus compras, prueba esto a ver que tal.
  #3 (permalink)  
Antiguo 06/04/2005, 05:42
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Gracias, vampirnet.

Esa consulta me provoca el siguiente error:

MySQL ha dicho: Documentación
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SUM(compras.Compras) AS Compras) FROM productos,compras
WHERE
  #4 (permalink)  
Antiguo 06/04/2005, 06:55
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
El tema de que no te aparezcan los que suman 0 es porque no existen datos en la tabla de compras. Tu sql es:
Código:
SELECT productos.Id,SUM(compras.Compras) AS Compras 
FROM productos left join compras on compras.Producto=productos.Id
GROUP BY productos.Id
Un saludo.
__________________
Estoy contagiado de Generación-I
  #5 (permalink)  
Antiguo 06/04/2005, 08:56
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Gracias, Vice.

La consulta que me has dado sí me devuelve todos los registros. Ahora iré un poco más allá. El sencillo ejemplo que os había puesto era para comprender cómo iba el tema, pero la solución no la puedo extrapolar a mi problema real (mea culpa) porque hay más tablas de por medio.

La consulta que no me devuelve los ceros en realidad es ésta:

SELECT artes.*,tipos_arte.Nombre,usuarios.Puntos,usuarios .Id AS Usr_id,login.L,SUM(puntos.Cantidad) AS Tot_puntos
FROM artes,tipos_arte,usuarios,login,puntos
WHERE puntos.Arte=artes.Id AND artes.Tipo=tipos_arte.Id AND artes.Usuario=usuarios.Id AND login.Usuario=usuarios.Id
GROUP BY artes.Id

He intentado aplicar tu solución a esta consulta, pero no tengo ni idea de por dónde cogerla. ¿Cómo sería?

Muchas gracias de nuevo.
  #6 (permalink)  
Antiguo 07/04/2005, 03:33
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
Vamos a ponerlo todo con joins explicitos en el from (esto no es realmente necesario pero, creo, hace que el gestor optimice mejor la consulta) y sólo tienes que hacer el "left join" sobre la tabla puntos:
Código:
SELECT artes.*,tipos_arte.Nombre,usuarios.Puntos,usuarios .Id AS Usr_id,login.L,SUM(puntos.Cantidad) AS Tot_puntos
FROM artes join tipos_arte on artes.tipo=tipos_arte.id join usuarios on artes.usuario=usuarios.id
join login on login.usuario=usuarios.id  left join puntos on puntos.arte=artes.id
WHERE puntos.Arte=artes.Id 
GROUP BY (todos los campos que quieres sacar)
En el group by no te pongo los campos que son, pues al poner artes.* no sé que campos son. Si quieres, por hacerlo más rápido puedes poner en el group by el número de los campos según su posición (group by 1,2,3,4 ...), pero hay que hacer referencia a todos menos el agregado.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #7 (permalink)  
Antiguo 07/04/2005, 05:01
Avatar de mariogl84  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 433
Antigüedad: 22 años
Puntos: 20
Vice, perdona que te dé tanto la brasa, te estoy muy agradecido por toda la ayuda. El caso es que con esta nueva consulta, no me devuelve los que suman 0, como al principio.

La he puesto tal y como tú me has dicho, en el group by he metido todos los campos que quiero mostrar, menos el que meto en SUM.

Gracias de nuevo.
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 14:22.