Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/04/2013, 14:10
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años
Puntos: 447
Respuesta: Separar un mismo campo

Hola tumbero_x:

Con permiso de gnzsoloyo te explico la razón del uno...

Este truco en realidad funciona como un contador en programación, es decir, supongo que has visto en más de una ocasión en cualquier lenguaje de programación algo como esto:

Código:
total = total + 1
Este mismo concepto se aplica en este caso. Cada que se analiza un registro se hace la comparación con el IF... si es verdadera entonces se va le pone un 1 como marca... al finalizar la función SUM "cuenta" cuantos 1 existen...

En otras palabras es como el sistema que utilizan los prisioneros para saber cuantos días tienen en la carcel... cada día que pasa ponen una "rayaita" en la pared... para saber cuantos días han pasado, simplemente cuentan el número de rayitas en la pared...

observa lo que pasa sin el SUM():

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +------+-------+
  3. | id   | campo |
  4. +------+-------+
  5. |    1 |     3 |
  6. |    2 |     6 |
  7. |    3 |     9 |
  8. |    4 |     9 |
  9. |    5 |     3 |
  10. |    6 |     3 |
  11. |    7 |     6 |
  12. |    8 |     6 |
  13. |    9 |     6 |
  14. +------+-------+
  15. 9 rows in set (0.00 sec)
  16.  
  17. mysql> SELECT id, campo,
  18.     ->   IF(campo = 3, 1, 0) Valor3,
  19.     ->   IF(campo = 6, 1, 0) Valor6,
  20.     ->   IF(campo = 9, 1, 0) Valor9
  21.     -> FROM tabla;
  22. +------+-------+--------+--------+--------+
  23. | id   | campo | Valor3 | Valor6 | Valor9 |
  24. +------+-------+--------+--------+--------+
  25. |    1 |     3 |      1 |      0 |      0 |
  26. |    2 |     6 |      0 |      1 |      0 |
  27. |    3 |     9 |      0 |      0 |      1 |
  28. |    4 |     9 |      0 |      0 |      1 |
  29. |    5 |     3 |      1 |      0 |      0 |
  30. |    6 |     3 |      1 |      0 |      0 |
  31. |    7 |     6 |      0 |      1 |      0 |
  32. |    8 |     6 |      0 |      1 |      0 |
  33. |    9 |     6 |      0 |      1 |      0 |
  34. +------+-------+--------+--------+--------+
  35. 9 rows in set (0.00 sec)

Al colocar la función SUM() simplemente cuenta el número de unos para cada categoría.

Saludos
Leo.