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

Restringir Valores

Estas en el tema de Restringir Valores en el foro de Mysql en Foros del Web. Hola! una consulta yo tengo una BD donde hay valores 0 y 99, donde está el valor 0 no debería haber ningun dato y los ...
  #1 (permalink)  
Antiguo 03/05/2011, 11:33
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 0
Exclamación Restringir Valores

Hola! una consulta yo tengo una BD donde hay valores 0 y 99, donde está el valor 0 no debería haber ningun dato y los 99 son datos perdidos.

Como puedo hacer para restringir estos valores y no los tome cuando quiera sacar el promedio con una columna donde esten estos datos???
(Estoy trabajando en phpmyadmin)

De antemano gracias por la respuesta!!!
  #2 (permalink)  
Antiguo 03/05/2011, 12:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Restringir Valores

Hola gabz:

No estoy seguro de si esto es lo que necesitas, pero puedes hacer que tu consulta no considere los registros con 0 y 99 poniendo una condición NOT IN en el where. Checa este ejemplo para ver si es lo que realmente necesitas:


Código MySQL:
Ver original
  1. mysql> create table promedios (id int, estatus int, valor int);
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> insert into promedios values (1,1,10),(2,1,9),(3,0,100),(4,99,-50),
  5.     -> (5,3,8);
  6. Query OK, 5 rows affected (0.05 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> select * from promedios;
  10. +------+---------+-------+
  11. | id   | estatus | valor |
  12. +------+---------+-------+
  13. |    1 |       1 |    10 |
  14. |    2 |       1 |     9 |
  15. |    3 |       0 |   100 |
  16. |    4 |      99 |   -50 |
  17. |    5 |       3 |     8 |
  18. +------+---------+-------+
  19. 5 rows in set (0.00 sec)
  20.  
  21. mysql> select avg(valor) from promedios;
  22. +------------+
  23. | avg(valor) |
  24. +------------+
  25. |    15.4000 |
  26. +------------+
  27. 1 row in set (0.00 sec)
  28.  
  29. mysql> select avg(valor) from promedios where estatus not in (0,99);
  30. +------------+
  31. | avg(valor) |
  32. +------------+
  33. |     9.0000 |
  34. +------------+
  35. 1 row in set (0.00 sec)
  36.  
  37. mysql>

En el primer caso toma todos los registros, por lo tanto

Código:
promedio = ( 10 + 9 + 100 + -50 +  8) / 5 =  77 / 5 = 15.40
En el segundo caso desde el select se excluyen los registros con 0 y 99 de tal manera que

Código:
promedio = (10+9+8) / 3 =  27 / 3 = 9.00
Saludos
Leo.
  #3 (permalink)  
Antiguo 03/05/2011, 14:43
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Restringir Valores

Y una consulta mas ese codigo lo puedo usar cuando tengo otra condicion???? porque en mi BD tengo ya una condicion, por lo que cuando pongo esta nueva condicion me sale error

(Gracias por la ayuda!!! ^^)
  #4 (permalink)  
Antiguo 03/05/2011, 14:49
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Restringir Valores

hola de nuevo gabz... no entendí lo último que escribiste, dices que estás tratando de hacer una consulta pero que te marca un error, sin embargo no nos dices ni cuál es el error ni tampoco nos pones la consulta que estás tratando de ejecutar. Somos informáticos, no adivinos jejeje

por qué no nos pones la consulta que estás tratando de hacer para ver cual es el problema, y serviría también que nos dijeras cuál es el código del error que te está mandando y ya que estamos con peticiones, pues también podrías incluir algunos datos de ejemplo. Entre más información puedas proporcionarnos más factible será que alguien pueda ayudarte.

Saludos
Leo.
  #5 (permalink)  
Antiguo 03/05/2011, 15:31
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Restringir Valores

Hola Leo disculpa si no fui clara, la consulta es:

SELECT * FROM ( SELECT notas.codigo, notas.segmento, atributos.atributo, atributos.dimension, IFNULL( CONCAT( IF( fecha2 = '2011-02-01', SUBSTRING(avg( notas.nota ),1,4) , NULL ) ) , 0 ) AS '2011-02-01', IFNULL( CONCAT( IF( fecha2 = '2011-03-01', SUBSTRING(avg( notas.nota ),1,4), NULL ) ) , 0 ) AS '2011-03-01' FROM notas notas, atributos atributos WHERE notas.nota NOT IN (0,99), notas.codigo=atributos.codigo, GROUP BY notas.fecha2, atributos.codigo ) AS notas1

El error que sale es:

"ERROR:Fallo en SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.codigo GROUP BY fecha2, atributos.codigo) AS notas1' at line 1 "


Esta consulta es una cosa horrorosa D: pero necesito restringir para que no me saque una media que este mal, he unido 2 tablas para poder ingresar unos campos (dimension y atributos) por lo que debería de salir asi:

Codigo Segmento Atributo Dimension Febrero Marzo
fidsen Residencial General General 7.74 6.89
tac05 Residencial General General 7.97 8.63

Ahi hay un error tambien porque primero me salen las medias de Febrero y donde debería salir Marzo sale 0 y cuando ya son los valores de Marzo en Febrero sale 0

Por lo que queda así:

Codigo Segmento Atributo Dimension Febrero Marzo
fidsen Residencial General General 7.74 0
tac05 Residencial General General 7.97 0
fidsen Residencial General General 0 6.89
tac05 Residencial General General 0 8.63

Agradezco infinitamente tu respuesta (Si no he sido clara hazmelo saber, no me se explicar muy bien jejejeje ^^U)
  #6 (permalink)  
Antiguo 04/05/2011, 05:49
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: Restringir Valores

Cita:
necesito restringir para que no me saque una media que este mal, he unido 2 tablas para poder ingresar unos campos (dimension y atributos) por lo que debería de salir asi:
¿Qué es lo que consideras que es una media que esté mal? ¿En qué sentido está mal?
Una media, es una media, si el dato, probado manualmente, no cierra es porque el agrupamiento o la selección de los datos es incorrecta. No por el cálculo en sí.
En tu caso, lo que está mal construido es ese IF() que pones en la consulta, necesitas que el calcular las medias en forma separada, en dos subconsultas diferentes, y no integrarlas en la misma.
El error de sintaxis que te declara, por otra parte, es simple: en el WHERE las condiciones no se separan por comas. Se separan por AND, OR o XOR (éste último es poco conocido). Son condiciones lógicas, y toda operación lógica requiere operadores lógicos.

Yo probaría la consulta más o menos así (no estoy conforme, pero no quiero hacertela demasiado complicada):
Código MySQL:
Ver original
  1.     N.codigo,
  2.     N.segmento,
  3.     A.atributo,
  4.     A.dimension,
  5.     CONCAT('2011-02-01: ', FORMAT(AVG(IF(fecha2 = '2011-02-01', N.nota, NULL)), 2)) `2011-02-01`,
  6.     CONCAT('2011-03-01: ', FORMAT(AVG(IF(fecha2 = '2011-03-01', N.nota, NULL)), 2)) `2011-03-01`
  7. FROM notas N INNER JOIN atributos A ON N.codigo=A.codigo
  8. WHERE N.nota NOT IN (0,99)
  9. GROUP BY notas.fecha2, atributos.codigo
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 08/05/2011, 09:42
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Restringir Valores

Wow muchas gracias!!! ya las notas no cogen los valores 0 y 99 muchas gracias!!!

Etiquetas: phpmyadmin, restringir
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 23:19.