Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/06/2010, 13:47
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: Sumar valores distintos de NULL

NULL no es un dato, por lo que no sirve para seer usado en ningún tipo de operaciones. Por otro lado, si realizas o fuerzas la operación entre diferentes columnas, una de las cuales contiene un NULL, el resultado será NULL, porque NULL anula todo resultado...

O Sea:
Cita:
1 + 2 + 3 + 4 + NULL = NULL.
Entonces, el problema es que si quieres sumar ciertos campos y uno o mas de ellos pueden llegar a contener NULL, debes controlar el problema.
hay dos formas prácticas:
1) La que te provee dggluz:
Código MySQL:
Ver original
  1. SELECT SUM(COALESCE(campo1, 0) + COALESCE(campo2, 0) + COALESCE(campo3, 0)) suma
  2. FROM tabla;

2) Usando IFNULL().
Código MySQL:
Ver original
  1. SELECT SUM(IFNULL(campo1, 0) + IFNULL(campo2, 0) + IFNULL(campo3, 0)) suma
  2. FROM tabla;

La diferencia esencial entre ambas formas es que IFNULL opera sobre un sólo campo,mientras que COALESCE puede operar sobre varios campos o valores, devolviendo el primero que cumpla la condición de no ser NULL.

Código MySQL:
Ver original
  1. SELECT COALESCE(campo1, campo2, campo3, campo4) NoNulo
  2. FROM tabla;

Ahora bien, en el caso de querer hacer una suma entre los 3 campos, mas o menos como l planteas al principio, bien se podría hacer:
Código MySQL:
Ver original
  1. SELECT (SUM(campo1) + SUM(campo2) + SUM(campo3))  suma
  2. FROM tabla;
Ya que SUM() sólo opera sobre valores no nulos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)