Ver Mensaje Individual
  #6 (permalink)  
Antiguo 12/09/2011, 09:26
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Filtro entre Rangos de Precio

Hola jakuam:

Con el permiso de quimfv, el problema está en el ultimo de los if's, Si te hubieras tomado un poco de tiempo para investigar la sintaxis de esta función verías que necesita tres parámetros:

Cita:
IF(expr1,expr2,expr3)

Si expr1 es TRUE (expr1 <> 0 and expr1 <> NULL) entonces IF() retorna expr2; de otro modo retorna expr3. IF() retorna un valor numérico o cadena de caracteres, en función del contexto en que se usa
.

El último de los if's sólo está recibiendo dos parámetros, checa este script:


Código MySQL:
Ver original
  1. mysql> CREATE TABLE locaciones  (id INT, precio INT);
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> INSERT INTO locaciones  VALUES (1, 50), (2, 110), (3, 75), (4, 250),
  5.     -> (5,1000), (6, 150), (7, 750);
  6. Query OK, 7 rows affected (0.07 sec)
  7. Records: 7  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM locaciones ;
  10. +------+--------+
  11. | id   | precio |
  12. +------+--------+
  13. |    1 |     50 |
  14. |    2 |    110 |
  15. |    3 |     75 |
  16. |    4 |    250 |
  17. |    5 |   1000 |
  18. |    6 |    150 |
  19. |    7 |    750 |
  20. +------+--------+
  21. 7 rows in set (0.00 sec)
  22.  
  23. mysql> SELECT
  24.     -> IF(precio < 100, "de $0 a $100",
  25.     -> IF(precio < 500, "de $100 a $500",
  26.     -> IF(precio < 1000, "de $500 a $1000","más $1000"))) AS rango,
  27.     -> COUNT(*)
  28.     -> FROM locaciones
  29.     -> GROUP BY
  30.     -> IF(precio < 100, "de $0 a $100",
  31.     -> IF(precio < 500, "de $100 a $500",
  32.     -> IF(precio < 1000, "de $500 a $1000","más $1000")));
  33. +-----------------+----------+
  34. | rango           | COUNT(*) |
  35. +-----------------+----------+
  36. | de $0 a $100    |        2 |
  37. | de $100 a $500  |        3 |
  38. | de $500 a $1000 |        1 |
  39. | más $1000       |        1 |
  40. +-----------------+----------+
  41. 4 rows in set (0.00 sec)

Debes tener cuidado en la definición correcta de tus rangos y tus descripciones, ya que tal y como los estás colocando no son totalmente excluyentes. Por ejemplo para el caso del registro donde el precio represente uno de los extremos del intervalo ¿Dónde debería colocarse? en mi forma particular de ver las cosas tus rangos deberías manejarlos así:

Código:
de $0 a $99.99
de $100 a $499.99
de $500 a $999.99
de $1000 en adelante
De esta manera no "empalmas" precios dentro de las categorías, pero eso es cuestión de tu lógica de negocio.

Saludos
Leo.