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

Sumar campos que no sean NULL en una consulta

Estas en el tema de Sumar campos que no sean NULL en una consulta en el foro de Mysql en Foros del Web. Buenas !! Pues no se si es posible hacer lo que quiero hacer, de momento no lo consigo. Se que el ejemplo que voy a ...
  #1 (permalink)  
Antiguo 04/09/2014, 12:15
 
Fecha de Ingreso: mayo-2008
Mensajes: 156
Antigüedad: 15 años, 11 meses
Puntos: 0
Sumar campos que no sean NULL en una consulta

Buenas !!

Pues no se si es posible hacer lo que quiero hacer, de momento no lo consigo. Se que el ejemplo que voy a poner no es muy práctico, pero para lo que quiero hacer en el fondo, me serviría como ejemplo. Repito xD, de antemano se que no es el mejor ejemplo porque me vais a decir que para eso se crea un indice y luego se haría un count, pero no es en definitiva lo que quiero hacer y pongo por tanto un ejemplo tonto.

Supongamos una tabla:

Código MySQL:
Ver original
  1. Nombres: nombrereal, apodo1, apodo2, apodo3

Imaginemos que nombrereal es la KEY y que por tanto es además única, y no puede ser NULL.
Luego los campos de apodo1, apodo2 y apodo3, si pueden ser NULL.

Mi intención es si por ejemplo:

Código MySQL:
Ver original
  1. nombrereal-apodo1-apodo2-apodo3
  2. ----------------------------------------------
  3. Jose-pepe-pepito-NULL
  4. Rafael-rafa-fali-falete

Mi intención es que de como resultado lo siguiente:

Jose 2
Rafa 3

Es decir hacer una suma de los campos que no sean null y sumarlos en la propia consulta.

Con IFNULL, si es nulo como es normal si puedo poner un cero, o al contrario, pero con un IF, realmente no lo consigo y me da uno por defecto siempre, esté o no el campo vacío (NULL)

Estoy haciendo lo siguiente:

Código MySQL:
Ver original
  1. Select nombrereal, IF(apodo1=NULL , 0, 1) as ap1, IF(apodo2=NULL , 0, 1) as ap2, IF(apodo3=NULL , 0, 1) as ap3
  2. FROM nombres

Y terminar de completar la consulta asi:

Código MySQL:
Ver original
  1. Select nombrereal, (IF(apodo1=NULL , 0, 1) + IF(apodo2=NULL , 0, 1) + IF(apodo3=NULL , 0, 1)) as suma
  2. FROM nombres


Espero vuestra ayuda ante esta tontería que os expongo

Gracias de antemano como siempre !
  #2 (permalink)  
Antiguo 14/09/2014, 23:49
 
Fecha de Ingreso: septiembre-2014
Mensajes: 2
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Sumar campos que no sean NULL en una consulta

Hola,

Prueba poner las condicionales asi:
Código SQL:
Ver original
  1. SELECT nombrereal, (IF(isNull(apodo1) , 0, 1) + IF(isNull(apodo2) , 0, 1) + IF(isNull(apodo3) , 0, 1)) AS suma
  2. FROM nombres

Un saludo

Última edición por gnzsoloyo; 16/09/2014 a las 06:23
  #3 (permalink)  
Antiguo 16/09/2014, 06:28
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: Sumar campos que no sean NULL en una consulta

Cita:
nombrereal-apodo1-apodo2-apodo3
----------------------------------------------
Jose-pepe-pepito-NULL
Rafael-rafa-fali-falete
Por lo pronto, eso está desnormalizado. No debes poner N campos del mismo dominio (apodos) en una tabla, sino en todo caso crear una tabla dependiente que conserve los apodos. Eso sería lo correcto, y te resolvería el problema con muy poco esfuerzo.

Cita:
persona(idpersona, nombre, ...)
apodo(idpersona, apodo)
La PK de la segunda tabla estaría compuesta por ambos campos y la consulta sería:

Código MySQL:
Ver original
  1. SELECT P.nombre, COUNT(A.idpersona) CantApodos
  2. FROM persona P LEFT JOIN apodo A ON P.idpersona = A.idpersona
  3. WHERE TRUE OR a.idpersona IS NULL
  4. GROUP BY P.idpersona
Esta query devolverá incluso cero donde la persona no tenga apodos registrados, así como no limita la cantidad de apodos a ninguna cantidad predeterminada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/09/2014, 08:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sumar campos que no sean NULL en una consulta

Creo que lo que buscas es esto:
Código MySQL:
Ver original
  1. SELECT nombre, (IF(apodo1 IS NULL,0,1) + IF(apodo2 IS NULL,0,1) + IF(apodo3 IS NULL,0,1)) apodos FROM nombretutabla

Última edición por jurena; 16/09/2014 a las 15:08

Etiquetas: campo, campos, null, select, tabla
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 08:23.