Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/03/2012, 14:06
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.