SQL - valor minimo y promedio de varios campos del mismo registro

   
Vista:

valor minimo y promedio de varios campos del mismo registro

Publicado por RICARDO MARQUEZ it@globaldata.mx (5 intervenciones) el 14/01/2014 04:40:59
Perdi mi post anterior.

estimados expertos, solicito ayuda para calcular el minimo y el promedio de varios campos de un mismo registros cuyo valo de cualquiera de ellos puede ser cero y necesito ignorar esos campos que tengan cero

tarifa1 tarifa2 tarifa3 promedio minimo
100 200 0 150 100

ya pude calcular el valor maximo asi:
{maxima}=max({tarifa1},{tarifa2},{tarifa3}); /// con resultado: 200

ml gracias por su ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

valor minimo y promedio de varios campos del mismo registro

Publicado por leonardo_josue (878 intervenciones) el 14/01/2014 17:09:19
Hola Ricardo:

Con qué base de Datos estás trabajando??? este dato es muy importante, pues aunque la mayoría de los DBMS's trabajan con SQL, existen diferencias muy significativas entre cada una de ellas, lo que simplifica o complica el tipo de consultas que estás haciendo...

El código que colocas realmente no parece SQL, sino más bien pareciera de algún tipo de lenguaje de programacion... trata de aclarar un poco más el panorama para poder tratar de ayudarte.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por Ricardo Marquez it@globaldata.mx (5 intervenciones) el 14/01/2014 17:52:11
Mil gracias Leo
Se nota que estoy en un nivel muy basico
estoy usando MySQL
y la funcion que puse como ejemplo es PHP
y ya coloque mi pregunta en el foro correcto (PHP)
pero aprovechando que me has querido apoyar y si dominas PHO te agradecere tu gentil ayuda
saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por leonardo_josue (878 intervenciones) el 14/01/2014 20:58:21
Hola de nuevo Ricardo:

Creo que para lo que estás pidiendo, sería más fácil que utilizaras las bondades de PHP para realizar los cálculos, aunque también pudieras hacerlo directamente desde la Base de Datos.

Tal como te comenté, cada BD posee funciones que te pueden facilitar en gran medida lo que quieres hacer (aunque también te las puede complicar)... en el caso particular de MySQL, este tiene funciones para calcular el Mínimo y el máximo sin tener que hacer muchas adecuaciones... checa esta liga:

http://dev.mysql.com/doc/refman/5.0/es/comparison-operators.html

Las funciones GREATEST y LEAST te podrían ayudar para obtener el valor máximo y mínimo... observa este ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
mysql> SELECT * FROM tabla;
+---------+---------+---------+
| tarifa1 | tarifa2 | tarifa3 |
+---------+---------+---------+
|     100 |     200 |       0 |
|       0 |     200 |       0 |
|     100 |     200 |     300 |
|       0 |       0 |       0 |
+---------+---------+---------+
4 rows in set (0.07 sec)
 
mysql> SELECT
    -> tarifa1,
    -> tarifa2,
    -> tarifa3,
    -> GREATEST(tarifa1, tarifa2, tarifa3) maximo,
    -> LEAST(tarifa1, tarifa2, tarifa3) minimo
    -> FROM tabla;
+---------+---------+---------+--------+--------+
| tarifa1 | tarifa2 | tarifa3 | maximo | minimo |
+---------+---------+---------+--------+--------+
|     100 |     200 |       0 |    200 |      0 |
|       0 |     200 |       0 |    200 |      0 |
|     100 |     200 |     300 |    300 |    100 |
|       0 |       0 |       0 |      0 |      0 |
+---------+---------+---------+--------+--------+
4 rows in set (0.00 sec)


Ahora bien, según entendí lo que necesitas es no considerar cuando alguno de los valores es cero... en el caso del MINIMO, te estaría dando valores equivocados...

Para este caso, puedes hacer uso de funciones condicionales (IF O CASE-WHEN) para darle un tratamiento especial, es decir, algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql> SELECT
    -> tarifa1,
    -> tarifa2,
    -> tarifa3,
    -> GREATEST(tarifa1, tarifa2, tarifa3) maximo,
    -> LEAST(IF(tarifa1 != 0, tarifa1, 999999),
    ->       IF(tarifa2 != 0, tarifa2, 999999),
    ->       IF(tarifa3 != 0, tarifa3, 999999)) minimo
    -> FROM tabla;
+---------+---------+---------+--------+--------+
| tarifa1 | tarifa2 | tarifa3 | maximo | minimo |
+---------+---------+---------+--------+--------+
|     100 |     200 |       0 |    200 |    100 |
|       0 |     200 |       0 |    200 |    200 |
|     100 |     200 |     300 |    300 |    100 |
|       0 |       0 |       0 |      0 | 999999 |
+---------+---------+---------+--------+--------+
4 rows in set (0.00 sec)

Es decir, en la función LEAST lo que hago es SUSTITUIR EL VALOR DE 0 por un valor muy grande, el cual NUNCA SERÁ EL MÍNIMO... el único problema ocurre en el último de los casos, cuando todos los campos son ceros... observa que el mínimo aparece como 999999. Si con tus datos se puede dar el caso de que las tres tarifas sean cero, entonces tendrías que agregar una condición IF para darle un tratamiento especial...

Ahora bien, para el cálculo del promedio algo parecido... el promedio consistiría en sumar los tres campos y dividirlo entre el número de campos distintos a cero... puedes hacer uso de IF para hacer estos cálculos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> SELECT
    -> tarifa1,
    -> tarifa2,
    -> tarifa3,
    -> IF(tarifa1 != 0, 1, 0) +
    -> IF(tarifa2 != 0, 1, 0) +
    -> IF(tarifa3 != 0, 1, 0) valores_distintos_de_cero
    -> FROM tabla;
+---------+---------+---------+---------------------------+
| tarifa1 | tarifa2 | tarifa3 | valores_distintos_de_cero |
+---------+---------+---------+---------------------------+
|     100 |     200 |       0 |                         2 |
|       0 |     200 |       0 |                         1 |
|     100 |     200 |     300 |                         3 |
|       0 |       0 |       0 |                         0 |
+---------+---------+---------+---------------------------+
4 rows in set (0.00 sec)

con esta suma obtienes el número de valores distintos de cero... es cuestión de que completes el cálculo para el promedio.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por Ricardo Marquez it@globaldata.mx (5 intervenciones) el 14/01/2014 21:12:37
Excelente explicacion y me deja muy claro aun a mi nivel basico
lo voy a poner en practica al igual que voy a estudiar el link que esta muy bueno
muchisims gracias
cordial saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por Ricardo Marquez it@globaldata.mx (5 intervenciones) el 15/01/2014 05:37:01
Saludos Leo
pues no logre que me funcionara desde la base de datos
serias tan amable y compartir la sintaxis para PHP?
muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por leonardo_josue (878 intervenciones) el 16/01/2014 19:44:49
Hola de nuevo Ricardo:

Lamentablemente no trabajo con PHP, aunque si trabajo bastante con MySQL... igual y espera a que te den la respuesta en el foro de PHP, es posible que los expertos en el tema te puedan ayudar.

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

valor minimo y promedio de varios campos del mismo registro

Publicado por Ricardo Marquez it@globaldata.mx (5 intervenciones) el 16/01/2014 20:00:19
Muchisimas gracias por tu gentil respuesta y ayuda
feliz dia
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar