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:
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+------+-------+
| id | campo |
+------+-------+
| 1 | 3 |
| 2 | 6 |
| 3 | 9 |
| 4 | 9 |
| 5 | 3 |
| 6 | 3 |
| 7 | 6 |
| 8 | 6 |
| 9 | 6 |
+------+-------+
-> IF(campo
= 3, 1, 0) Valor3
, -> IF(campo
= 6, 1, 0) Valor6
, -> IF(campo
= 9, 1, 0) Valor9
+------+-------+--------+--------+--------+
| id | campo | Valor3 | Valor6 | Valor9 |
+------+-------+--------+--------+--------+
| 1 | 3 | 1 | 0 | 0 |
| 2 | 6 | 0 | 1 | 0 |
| 3 | 9 | 0 | 0 | 1 |
| 4 | 9 | 0 | 0 | 1 |
| 5 | 3 | 1 | 0 | 0 |
| 6 | 3 | 1 | 0 | 0 |
| 7 | 6 | 0 | 1 | 0 |
| 8 | 6 | 0 | 1 | 0 |
| 9 | 6 | 0 | 1 | 0 |
+------+-------+--------+--------+--------+
Al colocar la función SUM() simplemente cuenta el número de unos para cada categoría.
Saludos
Leo.