Ver Mensaje Individual
  #6 (permalink)  
Antiguo 02/01/2016, 15:19
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
Puntos: 2658
Respuesta: Problema con IS NULL SQL

EL código que yo te pasé está correctamente escrito:
Código MySQL:
Ver original
  1. SELECT equipos,  COUNT(goles)  TotalGoles
  2.     (SELECT IF(TRIM(equipo) ='', 'Vacios', IFULL(equipo, 'Nulos')) equipos,  goles
  3.      FROM futbol) equipos_goles
  4. GROUP BY equipos;
ya lo verifiqué con MySQL Workbench, y no contiene errores de sintaxis.

El que tu usaste, le falta un paréntesis al menos. Ten en cuenta que IF() en ese caso es una función y no un condicional.

Código MySQL:
Ver original
  1. SELECT equipos,  COUNT(goles)  TotalGoles
  2.     (SELECT IF(TRIM(equipo) ='', 'El resto', equipo) equipos,  goles
  3.      FROM futbol) equipos_goles
  4. GROUP BY equipos;

Para mostrarte que la query no tiene errores, vamos a crear una tabla parecida a la que tienes (no tengo todos los detalles), y veamos como se comporta:
Código MySQL:
Ver original
  1. mysql> CREATE TABLE IF NOT EXISTS futbol (
  2.     ->     id_futbol INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  3.     ->     equipo VARCHAR(100) DEFAULT NULL,
  4.     ->     goles TINYINT UNSIGNED NOT NULL
  5.     -> );
  6. Query OK, 0 rows affected (0.08 sec)

Insertamos datos imaginarios:
Código MySQL:
Ver original
  1. mysql> INSERT INTO futbol(equipo, goles)
  2.     -> VALUES ('', 1),('', 1),('', 1),('', 1),('', 1),('', 1),('', 1),
  3.     -> ('Madrid', 1),('Madrid', 1),('Madrid', 1),('Madrid', 1),('Madrid', 1),
  4.     -> ('Madrid', 1),('Madrid', 1),('Madrid', 1),
  5.     -> ('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),
  6.     -> ('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),('Barcelona', 1),
  7.     -> ('Valencia', 1),('Valencia', 1),('Valencia', 1),('Valencia', 1),('Valencia', 1),('Valencia', 1),('Valencia', 1),('Valencia', 1),
  8.     -> ('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),('Atletico', 1),
  9.     -> ('', 1),('', 1),('', 1),('', 1),('', 1),('', 1),('', 1),('', 1),('', 1);
  10. Query OK, 53 rows affected (0.03 sec)
  11. Records: 53  Duplicates: 0  Warnings: 0

Y ejecutamos la ,query, con un ORDER BY para que sea más prolijo:

Código MySQL:
Ver original
  1. mysql> SELECT equipos,  COUNT(goles)  TotalGoles
  2.     -> FROM
  3.     ->     (SELECT IF(TRIM(equipo) ='', 'Los otros', equipo) equipos,  goles
  4.     ->      FROM futbol) equipos_goles
  5.     -> GROUP BY equipos
  6.     -> ORDER BY TotalGoles DESC;
  7. +-----------+------------+
  8. | equipos   | TotalGoles |
  9. +-----------+------------+
  10. | Los otros |         16 |
  11. | Barcelona |         12 |
  12. | Atletico  |          9 |
  13. | Valencia  |          8 |
  14. | Madrid    |          8 |
  15. +-----------+------------+
  16. 5 rows in set (0.00 sec)

Obviamente, la query está bien...

Ahora, vamos a profundizar la revision. Insertamos unos equipos en NULL, y veamos como se comporta la primera consulta:
Código MySQL:
Ver original
  1. mysql> INSERT INTO futbol(equipo, goles)VALUES (NULL, 1), (NULL, 1), (NULL, 1), (NULL, 1), (NULL, 1), (NULL, 1);
  2. Query OK, 6 rows affected (0.09 sec)
  3. Records: 6  Duplicates: 0  Warnings: 0
Consultamos:
Código MySQL:
Ver original
  1. mysql> SELECT equipos,  COUNT(goles)  TotalGoles
  2.     -> FROM
  3.     ->     (SELECT IF(TRIM(equipo) ='', 'Vacios', IFNULL(equipo, 'Nulos')) equipos,  goles
  4.     ->      FROM futbol) equipos_goles
  5.     -> GROUP BY equipos
  6.     -> ORDER BY TotalGoles DESC ;
  7. +-----------+------------+
  8. | equipos   | TotalGoles |
  9. +-----------+------------+
  10. | Vacios    |         16 |
  11. | Barcelona |         12 |
  12. | Atletico  |          9 |
  13. | Valencia  |          8 |
  14. | Madrid    |          8 |
  15. | Nulos     |          6 |
  16. +-----------+------------+
  17. 6 rows in set (0.00 sec)

Todo Ok...

NOTA BENE: Efectivamente, había un error en el segundo ejemplo de la query (no en el primero), porque en medio del tipeo se me borró la "N" de IFNULL... algo que con un poco de atención te podrías haber dado cuenta al ver el primero ejemplo pasado.

Consejo: Usa MSQL Workbench para codificar en MySQL. Tiene un corrector ortográfico y sintáctico automático que te evita problemas menores como este.

https://dev.mysql.com/downloads/workbench/5.2.html
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 02/01/2016 a las 16:53