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

Problema con avg, tiempo medio en ms

Estas en el tema de Problema con avg, tiempo medio en ms en el foro de Mysql en Foros del Web. Buenas a todos, necesito saber el tiempo medio en ms de los 10 productos que tengo en la BD y necesito saberlo del dia actual, ...
  #1 (permalink)  
Antiguo 09/10/2015, 00:47
 
Fecha de Ingreso: agosto-2015
Mensajes: 40
Antigüedad: 8 años, 7 meses
Puntos: 0
Problema con avg, tiempo medio en ms

Buenas a todos, necesito saber el tiempo medio en ms de los 10 productos que tengo en la BD y necesito saberlo del dia actual, de ayer, de antes de ayer y de hace 3 días. El problema es que la media me da un numero raro, es decir no me hace bien la media, por ejemplo: 2 y 4 la media tendria que ser 3 y me da menos a tres por ejemplo 1 o 1,5...no me da 3...
Hago la siguiente query:

Código MySQL:
Ver original
  1. SELECT producto, AVG(CASE WHEN fecha = '2015-10-09' THEN tiempomedioenms ELSE 0 END) AS hoy
  2. , AVG(CASE WHEN fecha = '2015-10-08' THEN tiempomedioenms ELSE 0 END) AS ayer
  3. , AVG(CASE WHEN fecha = '2015-10-07' THEN tiempomedioenms ELSE 0 END) AS anteayer
  4. , AVG(CASE WHEN fecha = '2015-10-06' THEN tiempomedioenms ELSE 0 END) AS hace4dias
  5. FROM tabla
  6. GROUP BY producto;

Me podeis decir como sería la query correcta?? Muchas gracias a todos los que me ayuden.
Saludos.

Última edición por gnzsoloyo; 13/10/2015 a las 08:57
  #2 (permalink)  
Antiguo 09/10/2015, 08:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con avg, tiempo medio en ms

revisa tu query sin hacer la media para que revises si son los datos que esperas ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 11/10/2015, 04:18
 
Fecha de Ingreso: agosto-2015
Mensajes: 40
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Problema con avg, tiempo medio en ms

Ya lo hago y no me hace la media bien, me tendría que dar mucho mas la media y me da menor, sabéis por que puede ser?? Alomejor me cuenta algunos valores con 0 y por eso me da menor....
Alguna idea o ayuda??
Muchas gracias libras. Saludos.
  #4 (permalink)  
Antiguo 12/10/2015, 07:49
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con avg, tiempo medio en ms

tienes algunos null en tu tabla??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 13/10/2015, 00:37
 
Fecha de Ingreso: agosto-2015
Mensajes: 40
Antigüedad: 8 años, 7 meses
Puntos: 0
Respuesta: Problema con avg, tiempo medio en ms

Si tengo campos null, ccmtiempomedioms es un integer y pongo la siguiente query(porque tengo valores que son 0 o null en ccmtiempomedioms)

Código MySQL:
Ver original
  1. SELECT  AVG(CASE WHEN fecha = '2015-10-13' THEN ccmtiempomedioms ELSE 0 END) AS hoy
  2. , AVG(CASE WHEN fecha = '2015-10-12' THEN ccmtiempomedioms ELSE 0 END) AS ayer
  3. , AVG(CASE WHEN fecha = '2015-10-11' THEN ccmtiempomedioms ELSE 0 END) AS anteayer
  4. , AVG(CASE WHEN fecha = '2015-10-10' THEN ccmtiempomedioms ELSE 0 END) AS hace4dias
  5. FROM tabla
  6. WHERE ccmtiempomedioms > '0'


Pero aun asi me da mal la media, por qué??????????

Última edición por gnzsoloyo; 13/10/2015 a las 08:57
  #6 (permalink)  
Antiguo 13/10/2015, 08:25
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Problema con avg, tiempo medio en ms

cuando haces un avg te toma en cuenta los valores que son null, por ejemplo si tienes 5 valores y 2 de ellos tienen null te haria el promedio entre 5 no entre 3
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/10/2015, 08:55
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: Problema con avg, tiempo medio en ms

En realidad, MySQL no toma en cuenta los NULL para las funciones agrupadas, porque a NULL no lo considera un dato, sino un estado.
Cita:
http://dev.mysql.com/doc/refman/5.6/...functions.html
(...) Unless otherwise stated, group functions ignore NULL values.
Lo que yo veo mal es que está complicando la consulta con algo que debería hacer en la aplicación, como es invertir la tabla, es decir, mostrar como columnas cosas datos que son registros.
Esto devolvería datos útiles:

Código MySQL:
Ver original
  1. SELECT DATE(fecha) fecha, AVG(ccmtiempomedioms) tiempomedio
  2. FROM tabla
  3. WHERE fecha BETWEEN '2015-10-10' AND '2015-10-13'
  4. GROUP BY DATE(fecha);

Luego será solo mostrarlo como se quiere. Yo no le encuentro utilidad a construir en la consulta algo que puedes resolver con menos de diez lineas de programación.

Por otro lado, a mesar de tener una sintaxis similar, el uso de CASE en el SELECT en MySQL no es tan buena idea como en otros DMS, y es más propenso a generar errores en los backups, y en la evaluación de los datos.
Es preferible reemplazarlo con IF(), donde se pueda.

Código MySQL:
Ver original
  1.     AVG(IF( DATE(fecha) = '2015-10-13', ccmtiempomedioms, 0)) hoy,
  2.     AVG(IF( DATE(fecha) = '2015-10-12', ccmtiempomedioms, 0)) ayer,
  3.     AVG(IF( DATE(fecha) = '2015-10-11', ccmtiempomedioms, 0)) anteayer,
  4.     AVG(IF( DATE(fecha) = '2015-10-10', ccmtiempomedioms, 0)) hace4dias
  5. FROM tabla
  6. WHERE ccmtiempomedioms >= 0

NOTA: No compares los números como cadenas. Genera bajas de performance por obligar a MySQL a realizar conversiones implícitas.
__________________
¿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; 13/10/2015 a las 09:02

Etiquetas: avg, fecha, medio, select, tabla, tiempo
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 22:25.