Foros del Web » Programando para Internet » PHP »

Calcular promedio (media) de filas

Estas en el tema de Calcular promedio (media) de filas en el foro de PHP en Foros del Web. Hola a todos: Os comento mi problema: tengo un listado que muestra los resultados de un formulario (de una encuesta). Y ciertos campos de ese ...
  #1 (permalink)  
Antiguo 13/01/2012, 02:46
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Calcular promedio (media) de filas

Hola a todos:

Os comento mi problema: tengo un listado que muestra los resultados de un formulario (de una encuesta). Y ciertos campos de ese formualrio proporcionan un valor numérico:

Código:
ID    Fecha      Empresa  Nombre Cargo PL NL OF SC CC SP IM CP MT VG PM OG RE PD
001  02/01/12    Pruebas  Pedro Jefe    9  8  7  8  7  7  9  5  4  9  7  5  9  7
002  03/01/12    CD,S.A.  Santi Jefe    7  6  4  6  8  4  6  8  9  4  3  9  3  9
Lo que quiero es que al final de la tabla haya una columna con las medias de las filas...

Os pongo como creo la tabla:

Código:
<table border="1" cellspacing=0 cellpadding=1 style="font-size: 8pt">
  <tr>
  	
     <td width="17" align="center"><font face="verdana" ><b><abbr title="Nº de encuesta">ID</abbr></b></font></td>
    <td width="40" align="center"><font face="verdana"><b><abbr title="Fecha de recepción">Fecha</abbr></b></font></td>
    <td width="110" align="center"><font face="verdana"><b><abbr title="Empresa">Empresa</abbr></b></font></td>
    <td width="80" align="center"><font face="verdana"><b><abbr title="Nombre del cliente">Nombre</abbr></b></font></td>
    <td width="110" align="center"><font face="verdana"><b><abbr title="Cargo">Cargo</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Cumplimiento plazos">PL</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Cumplimiento normativa y legislación">NL</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Calidad y detalle de las ofertas">OF</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Actitud de Servicio al Cliente">SC</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Comunicación con el Cliente">CC</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Relación servicio/precio">SP</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Capacidad de respuesta ante imprevistos">IM</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Disponibilidad y cualificación del personal">CP</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Medios t&eacute;cnicos">MT</abbr></b></font></td>
    <td width="17" align="center"><font face="verdana"><b><abbr title="Valoracíón global">VG</abbr></b></font></td>
<!--     <td width="17" align="center"><font face="verdana"><b><abbr title="Media preguntas comunes">ME</abbr></b></font></td>-->
   
  </tr>

<?php  


  $link = @mysql_connect("localhost", "xxxx","xxxxxx")
      or die ("Error al conectar a la base de datos.");
  @mysql_select_db("xxxx", $link)
      or die ("Error al conectar a la base de datos.");

   $query = "SELECT * " .
      "FROM instalaciones " .
	  "ORDER BY id ";

  $result = mysql_query($query);
  while($row = mysql_fetch_array($result))
  {
    echo "<tr><td align=\"center\"><font face=\"verdana\">" . 
	    $row["ID"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" . 
	    $row["FECHA"] . "</font></td>";
    echo "<td><font face=\"verdana\">" . 
	    $row["EMPRESA"] . "</font></td>";
    echo "<td><font face=\"verdana\">" . 
	    $row["NOMBRE"]. "</font></td>"; 
    echo "<td><font face=\"verdana\">" . 
	    $row["CARGO"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["PLAZOS"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["NORMATIVA"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["OFERTAS"]. "</font></td>"; 
   echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["ACTITUD_SERVICIO"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["COMUNICACION"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["SERVICIO_PRECIO"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["RESPUESTA_IMPREVISTOS"]. "</font></td>"; 
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["CUALIFICACION"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["MEDIOS_TECNICOS"] . "</font></td>";
    echo "<td align=\"center\"><font face=\"verdana\">" .  
	    $row["VALORACION_GLOBAL"] . "</font></td>";

echo "La columna con la media de las filas tendría que situarse aquí"	
.

    echo "</tr>"; 
   		
     }
 mysql_free_result($result);
  mysql_close($link);
?>
</table>
La pregunta es clara: ¿cómo puedo hacer para calcualr la media de la fila y me la muestre donde quiero en la tabla?
Muchas gracias por ayudarme en este tema. Un saludo.
  #2 (permalink)  
Antiguo 13/01/2012, 04:29
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: Calcular promedio (media) de filas

Con estos datos metidos en un array haces count() para saber la cantidad de datos (si no lo sabes o es variable), luego suma todos los valores del array. Puedes hacerlo con un foreach o con la función array_sum()
Luego divide la suma entre el número total de valores del array....vamos, lo que viene siendo la media aritmética de toda la vida


Un saludo
__________________
Web Designer.
Themes-Up!, próximamente
  #3 (permalink)  
Antiguo 13/01/2012, 04:32
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Cita:
Iniciado por fishdesign Ver Mensaje
Con estos datos metidos en un array haces count() para saber la cantidad de datos (si no lo sabes o es variable), luego suma todos los valores del array. Puedes hacerlo con un foreach o con la función array_sum()
Luego divide la suma entre el número total de valores del array....vamos, lo que viene siendo la media aritmética de toda la vida


Un saludo
Gracias por la respuesta. La práctica es lo que me falla, lo que no sé es como trasladar lo que me comentas al sitio exacto en donde quiero colocarlo...
  #4 (permalink)  
Antiguo 13/01/2012, 05:15
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: Calcular promedio (media) de filas

Para sacar uno solo sería algo así;

Código PHP:
Ver original
  1. <?php
  2. $arrayData = array(1,3,5,9);
  3. $size = count($arrayData);
  4.  
  5. $arrayFinal = array_sum($arrayData);
  6.  
  7. echo $arrayFinal / $size;
  8.  
  9. ?>


Para hacerlo en cada uno, tan solo debe cambiar el contenido de $arrayData. Podrías hacerlo con un bucle.

Un saludo
__________________
Web Designer.
Themes-Up!, próximamente
  #5 (permalink)  
Antiguo 13/01/2012, 05:50
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Cita:
Iniciado por fishdesign Ver Mensaje
Para sacar uno solo sería algo así;

Código PHP:
Ver original
  1. <?php
  2. $arrayData = array(1,3,5,9);
  3. $size = count($arrayData);
  4.  
  5. $arrayFinal = array_sum($arrayData);
  6.  
  7. echo $arrayFinal / $size;
  8.  
  9. ?>


Para hacerlo en cada uno, tan solo debe cambiar el contenido de $arrayData. Podrías hacerlo con un bucle.

Un saludo

Gracias por la ayuda, Un par de cuestiones:
  • La función Array permite incluir campos en vez de números?
  • Si te fijas en el código, ya hay un bucle para ir insertando los valores de la fila. De tal modo, ¿cómo tendria que insertar este código según el formato que ya tengo?

Lo dicho, muchas gracias por tu paciencia...
  #6 (permalink)  
Antiguo 13/01/2012, 11:13
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

¿Alguna aportación más?
  #7 (permalink)  
Antiguo 13/01/2012, 11:32
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Calcular promedio (media) de filas

Yo opino que deberías sacar los promedios con MySQL, usando AVG por ejemplo. Te recomiendo que preguntes por ese foro y algún experto te pueda guiar mejor.

http://dev.mysql.com/doc/refman/5.0/...functions.html

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 13/01/2012, 11:44
 
Fecha de Ingreso: agosto-2011
Ubicación: Viña del Mar, Chile
Mensajes: 311
Antigüedad: 12 años, 7 meses
Puntos: 50
Respuesta: Calcular promedio (media) de filas

Concuerdo, con AVG lo solucionas..esto es un ejemplo:

SELECT AVG(campo) AS promedio FROM tabla

Luego imprimes promedio,
Saludos
__________________
He aprendido mucho y sigo aprendiendo cada día aquí...así que ayudo cuando puedo para disminuir mi deuda XD..
mi hobby
  #9 (permalink)  
Antiguo 13/01/2012, 11:46
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Cita:
Iniciado por andresdzphp Ver Mensaje
Yo opino que deberías sacar los promedios con MySQL, usando AVG por ejemplo. Te recomiendo que preguntes por ese foro y algún experto te pueda guiar mejor.

[url]http://dev.mysql.com/doc/refman/5.0/es/group-by-functions.html[/url]

Saludos.
Cita:
Iniciado por snowmanchip Ver Mensaje
Concuerdo, con AVG lo solucionas..esto es un ejemplo:

SELECT AVG(campo) AS promedio FROM tabla

Luego imprimes promedio,
Saludos

Os respondo aquí a los dos: lo que me comentáis creo que es para medias de los datos que están en columna. Yo necesito hacer la media de los datos de una fila...
  #10 (permalink)  
Antiguo 13/01/2012, 11:51
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Calcular promedio (media) de filas

Cita:
Iniciado por eldruidavigues Ver Mensaje
Os respondo aquí a los dos: lo que me comentáis creo que es para medias de los datos que están en columna. Yo necesito hacer la media de los datos de una fila...
Si es por filas sumas los campos y divides por el numero de campos dentro del bucle? cual es el problema?
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #11 (permalink)  
Antiguo 13/01/2012, 12:02
 
Fecha de Ingreso: agosto-2011
Ubicación: Viña del Mar, Chile
Mensajes: 311
Antigüedad: 12 años, 7 meses
Puntos: 50
Respuesta: Calcular promedio (media) de filas

No había leído bién,
Cita:
Lo que quiero es que al final de la tabla haya una columna con las medias de las filas...
Pero no es mejor mostrar el promedio de cada fila calculando los datos de la base que ingresarlo a la base de datos?, lo digo porque al insertar en la base deberías generar el promedio, por lo que deberías usar un script para calcular antes de ingresar a la bd, ya sea con ajax o haciendo dos pasos con php.
Para calcular...sólo deberías sumar los campos de cada columna por fila y dividirla por el número de campos tal cuál explica fish design..

Saludos
__________________
He aprendido mucho y sigo aprendiendo cada día aquí...así que ayudo cuando puedo para disminuir mi deuda XD..
mi hobby
  #12 (permalink)  
Antiguo 13/01/2012, 12:06
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Cita:
Iniciado por andresdzphp Ver Mensaje
Si es por filas sumas los campos y divides por el numero de campos dentro del bucle? cual es el problema?
El problema es que no sé cómo meterlo en el código que ya tengo, el que me muestra todos los registros de la tabla y en la que quiero añadir una columna con la media de ciertos valores de cada fila... No quiero añadir la media a la base de datos, sólo quiero que me la calcule en pantalla.
  #13 (permalink)  
Antiguo 13/01/2012, 12:12
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Calcular promedio (media) de filas

Pues como te indicaron arriba, coloca esto dentro del bucle while, en donde quieras que salga el resultado:

Código PHP:
Ver original
  1. $arr = array($row['campo1'], $row['campo2'], $row['campo3'], $row['campo4'], $row['campo5'],
  2. $row['campo6'], $row['campo7'], $row['campo8'], $row['campo9'], $row['campo10'], $row['campo11'],
  3. $row['campo12'], $row['campo13'], $row['campo14']); //reemplaza por tus campos
  4.  
  5. //donde vayas a imprimir el resultado:
  6.  
  7. echo array_sum($arr) / count($arr);

puede ir donde tienes:

Código PHP:
Ver original
  1. echo "La columna con la media de las filas tendría que situarse aquí"
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #14 (permalink)  
Antiguo 13/01/2012, 12:26
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Gracias, nos vamos acercando,
Código PHP:
Ver original
  1. $arr = array($row['PLAZOS'], $row['NORMATIVA'], $row['OFERTAS'], $row['ACTITUD_SERVICIO'], $row['COMUNICACION'],$row['SERVICIO_PRECIO'], $row['RESPUESTA_IMPREVISTOS'], $row['CUALIFICACION'], $row['MEDIOS_TECNICOS'], $row['VALORACION_GLOBAL']);
  2.        
  3.  //    echo array_sum($arr) / count($arr);
  4.  
  5. echo "<td align=\"center\"><font face=\"verdana\">" .  
  6.         $row["array_sum($arr) / count($arr)"] . "</font></td>";

¿Cómo tendría que rellenar esto:
Código PHP:
Ver original
  1. echo "<td align=\"center\"><font face=\"verdana\">" .  
  2.         $row["array_sum($arr) / count($arr)"] . "</font></td>";
para que me escriba la media en esa fila?
  #15 (permalink)  
Antiguo 13/01/2012, 12:29
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Calcular promedio (media) de filas

Para imprimir es:

Código PHP:
Ver original
  1. array_sum($arr) / count($arr)

NO

Código PHP:
Ver original
  1. $row["array_sum($arr) / count($arr)"]
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #16 (permalink)  
Antiguo 13/01/2012, 12:39
 
Fecha de Ingreso: abril-2007
Mensajes: 17
Antigüedad: 17 años
Puntos: 1
Respuesta: Calcular promedio (media) de filas

Muchas gracias, por fin salió!!!!!

Etiquetas: fila, filas, media, promedio
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 00:16.