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

Se puede en un Query hacer un avg para varios campos?

Estas en el tema de Se puede en un Query hacer un avg para varios campos? en el foro de Mysql en Foros del Web. Hola a todos, Tengo una duda es posible sacar un promedio o un conteo de varios campos de una tabla? algo como avg(campo1, campo2, campo3); ...
  #1 (permalink)  
Antiguo 27/03/2012, 10:21
 
Fecha de Ingreso: marzo-2012
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Pregunta Se puede en un Query hacer un avg para varios campos?

Hola a todos,

Tengo una duda es posible sacar un promedio o un conteo de varios campos de una tabla?

algo como

avg(campo1, campo2, campo3);
o
count(campo1, campo2, campo3);


De antemano gracias por la ayuda.

Saludos

Última edición por mixsolojoomla; 27/03/2012 a las 10:45 Razón: mejor titulo
  #2 (permalink)  
Antiguo 27/03/2012, 11:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Se puede en un Query hacer un avg para varios campos?

No, se aplica la función que necesites a cada uno de los campos individualmente.
Lo que si puedes hacer es aplicarlo sobre el resultado de una operación aritmética que involucre más de un campo, en tanto la operación sea consistente:
Código MySQL:
Ver original
  1. AVG(campo1 + campo2 - campo3);

Código MySQL:
Ver original
  1. COUNT((campo1 * campo2) / campo3);
__________________
¿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; 27/03/2012 a las 12:09
  #3 (permalink)  
Antiguo 27/03/2012, 11:47
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Se puede en un Query hacer un avg para varios campos?

Hola, puedes darle un vistazo a este post, talvez aplique a tu necesidad.

http://www.forosdelweb.com/f86/union...-media-983468/
  #4 (permalink)  
Antiguo 27/03/2012, 12:56
 
Fecha de Ingreso: marzo-2012
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Se puede en un Query hacer un avg para varios campos?

Gracias a gnzsoloyo y lenincasco por sus respuestas.

Realmente la situación es esta:

Estoy tratando de hacer el promedio de los valores diferentes de cero de las variedades en cada ciudad



he intentado hacerlo asi:


SELECT `variedad`,`ciudad1`,`ciudad2`, `ciudad3`, `ciudad4`, `ciudad5`, `ciudad6`, `ciudad7`, `ciudad8`, sum(if (ciudad1>0,ciudad1,0) + if (ciudad2>0,ciudad2,0)+if (`ciudad3`>0,`ciudad3`,0) + if (`ciudad4`>0,`ciudad4`,0)+if (`ciudad5`>0,`ciudad5`,0) + if (`ciudad6`>0,`ciudad6`,0)+if (`ciudad7`>0,`ciudad7`,0) ) as suma,
count(if (`ciudad1`>0,1,0) + if (`ciudad2`>0,1,0) + if (`ciudad3`>0,1,0) + if (`ciudad4`>0,1,0) + if (`ciudad5`>0,1,0) + if (`ciudad6`>0,1,0) + if (`ciudad7`>0,1,0)) as cuenta

FROM `prom` group by variedad

Pero el resultado que me da en la cuenta es errado.

Espero haber sido claro.

Agradezco de antemano toda la ayuda que me puedan brindar.

Saludos

Última edición por mixsolojoomla; 27/03/2012 a las 13:57 Razón: correccion
  #5 (permalink)  
Antiguo 27/03/2012, 14:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Se puede en un Query hacer un avg para varios campos?

Hola mixsolojoomla:

No estás tan equivocad@ con la consulta que planteas... creo que sólo era cuestión que revisaras un poco más e hicieras los ajustes necesarios:

Código:
mysql> SELECT * FROM prom;
+------------+---------+---------+---------+---------+---------+---------+---------+
| variedades | ciudad2 | ciudad3 | ciudad4 | ciudad5 | ciudad6 | ciudad7 | ciudad8 |
+------------+---------+---------+---------+---------+---------+---------+---------+
| variedad1  | 300.600 | 291.333 |   0.000 | 296.000 |   0.000 | 280.000 | 287.666 
| variedad2  |   0.000 |   0.000 |   0.000 | 740.000 |   0.000 |   0.000 | 719.100 |
| variedad3  |   0.000 |   0.000 |  45.000 |   0.000 |   0.000 |   0.000 |   0.000 |
| variedad4  |   0.000 |   0.000 |   0.000 |   0.000 |   5.000 |   0.000 |   0.000 |
+------------+---------+---------+---------+---------+---------+---------+---------+
4 rows in set (0.00 sec)

mysql> SELECT variedades, ciudad2, ciudad3, ciudad4, ciudad5, ciudad6, 
    -> ciudad7,ciudad8,
    -> (suma / 7) prom_real,
    -> (suma / cuenta_no_vacios) prom_especial FROM
    -> (SELECT
    -> variedades, ciudad2, ciudad3, ciudad4, ciudad5, ciudad6, ciudad7, ciudad8,
    -> SUM(ciudad2+ciudad3+ciudad4+ciudad5+ciudad6+ciudad7+ciudad8) suma,
    -> SUM(IF (ciudad2 != 0, 1, 0)+IF (ciudad3 != 0, 1, 0)+IF (ciudad4 != 0, 1,0)+
    -> IF (ciudad5 != 0, 1, 0)+IF (ciudad6 != 0, 1, 0)+IF (ciudad7 != 0, 1, 0)+
    -> IF (ciudad8 != 0, 1, 0)) cuenta_no_vacios
    -> FROM prom
    -> GROUP BY variedades
    -> ) T;
+------------+---------+---------+---------+---------+---------+---------+---------+-------------+---------------+
| variedades | ciudad2 | ciudad3 | ciudad4 | ciudad5 | ciudad6 | ciudad7 | ciudad8 | prom_real   | prom_especial |
+------------+---------+---------+---------+---------+---------+---------+---------+-------------+---------------+
| variedad1  | 300.600 | 291.333 |   0.000 | 296.000 |   0.000 | 280.000 | 287.666 | 207.9427143 |   291.1198000 |
| variedad2  |   0.000 |   0.000 |   0.000 | 740.000 |   0.000 |   0.000 | 719.100 | 208.4428571 |   729.5500000 |
| variedad3  |   0.000 |   0.000 |  45.000 |   0.000 |   0.000 |   0.000 |   0.000 |   6.4285714 |    45.0000000 |
| variedad4  |   0.000 |   0.000 |   0.000 |   0.000 |   5.000 |   0.000 |   0.000 |   0.7142857 |     5.0000000 |
+------------+---------+---------+---------+---------+---------+---------+---------+-------------+---------------+
4 rows in set (0.00 sec)
Es posible que esta no sea la forma más eficiente de hacerlo, pero creo que debe funcionar.

Dale un vistazo y nos comentas.

Saludo
Leo.
  #6 (permalink)  
Antiguo 27/03/2012, 14:22
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 10 meses
Puntos: 8
Respuesta: Se puede en un Query hacer un avg para varios campos?

Hola, otra alternativa.

Código MySQL:
Ver original
  1. select t1.*,(ciudad1+ciudad2+ciudad3+ciudad4) suma,
  2. if(ciudad1<>0,1,0)+if(ciudad2<>0,1,0)+if(ciudad3<>0,1,0)+if(ciudad4<>0,1,0) cuenta_novacios,
  3. (ciudad1+ciudad2+ciudad3+ciudad4)/(if(ciudad1<>0,1,0)+if(ciudad2<>0,1,0)+if(ciudad3<>0,1,0)+if(ciudad4<>0,1,0)) prom_real,
  4. (ciudad1+ciudad2+ciudad3+ciudad4)/4 prom_especial
  5. from prom t1;

puse el ejemplo con 4 ciudades nada mas.
  #7 (permalink)  
Antiguo 27/03/2012, 20:22
 
Fecha de Ingreso: marzo-2012
Mensajes: 6
Antigüedad: 12 años, 7 meses
Puntos: 1
De acuerdo Respuesta: Se puede en un Query hacer un avg para varios campos?

Muchas gracias leonardo_josue y LENINCASCO,


Me ayudaron muchisimo en la solución. Mi problema estaba en el conteo y la solución era sumar de 1 en 1 y no contar.

Mil y mil gracias.

Saludos

Etiquetas: avg, count, query, tabla, campos
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 10:30.