Foros del Web » Programando para Internet » PHP »

Promedio de una query MYSQL

Estas en el tema de Promedio de una query MYSQL en el foro de PHP en Foros del Web. Estimados. Jamas pensé preguntar algo relacionado a php y mysql....pero bueno... ya me ven. Hice una query bastante larga, inserta dentro de un bucle, que ...
  #1 (permalink)  
Antiguo 29/01/2010, 22:21
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Promedio de una query MYSQL

Estimados. Jamas pensé preguntar algo relacionado a php y mysql....pero bueno... ya me ven.

Hice una query bastante larga, inserta dentro de un bucle, que me devuelve 15 columnas, entre ellas una numerica, la cual necesito calcular el promedio.

Código PHP:
$queEmp.="SELECT CONCAT(apellido,' ',nombre) as nombre, ramos.asig_cor as ramo,nota1,nota2,nota3,nota4,nota5,nota6,nota7,nota8,nota9,nota10,nota11,nota12,nota13,nota14,nota15,round(coalesce(((COALESCE((nota1),0)+COALESCE((nota2),0)+COALESCE((nota3),0)+COALESCE((nota4),0)+COALESCE((nota5),0)+COALESCE((nota6),0)+COALESCE((nota7),0)+COALESCE((nota8),0)+COALESCE((nota9),0)+COALESCE((nota10),0)+COALESCE((nota11),0)+COALESCE((nota12),0)+COALESCE((nota13),0)+COALESCE((nota14),0)+COALESCE((nota15),0)))/(SELECT COUNT(nota1)+COUNT(nota2)+COUNT(nota3)+COUNT(nota4)+COUNT(nota5)+COUNT(nota6)+COUNT(nota7)+COUNT(nota8)+COUNT(nota9)+COUNT(nota10)+COUNT(nota11)+COUNT(nota12)+COUNT(nota13)+COUNT(nota14)+COUNT(nota15)),0),1) as final FROM alumnos,".$row_tablas['tabla'].",ramos WHERE alumnos.alumnoid=".$row_tablas['tabla'].".alumnoid and alumnos.alumnoid='1' and ramos.tabla='".$row_tablas['tabla']."' GROUP BY alumnos.alumnoid  "
devuelta me da 32 filas, de ellas, la columna final, que obviamente contendra 32 resultados, es la que necesito sacar la media. Me parece que es mas sencillo hacerlo desde php que en mysql.

Código PHP:
$resEmp mysql_query($queEmp$opr_docente) or die(mysql_error());
$row_resEmp mysql_fetch_assoc($resEmp);
$totEmp mysql_num_rows($resEmp);

do {
echo 
$row_resEmp['final']." - ";
}while (
$row_resEmp mysql_fetch_assoc($resEmp)); 
Con row_resEmp['final'] dentro de un do while, logro mostrar todas las filas, pero no obtener el promedio.

Espero haberme explicado, ya que a esta hora no me llega sangre a la cabeza .


Espero haberme explicado bien. Ya a esta hora no me llega sangre a la cabeza.
  #2 (permalink)  
Antiguo 29/01/2010, 22:37
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 16 años
Puntos: 11
Respuesta: Promedio de una query MYSQL

Código PHP:
$queEmp.="
SELECT avg(final) as promedio FROM
(
SELECT CONCAT(apellido,' ',nombre) as nombre,
ramos.asig_cor as ramo,
nota1,nota2,nota3,nota4,nota5,
nota6,nota7,nota8,nota9,nota10,
nota11,nota12,nota13,nota14,nota15,
round(coalesce(((COALESCE((nota1),0)+COALESCE((nota2),0)+COALESCE((nota3),0)+COALESCE((nota4),0)+COALESCE((nota5),0)+COALESCE((nota6),0)+COALESCE((nota7),0)+COALESCE((nota8),0)+COALESCE((nota9),0)+COALESCE((nota10),0)+COALESCE((nota11),0)+COALESCE((nota12),0)+COALESCE((nota13),0)+COALESCE((nota14),0)+COALESCE((nota15),0)))/(SELECT COUNT(nota1)+COUNT(nota2)+COUNT(nota3)+COUNT(nota4)+COUNT(nota5)+COUNT(nota6)+COUNT(nota7)+COUNT(nota8)+COUNT(nota9)+COUNT(nota10)+COUNT(nota11)+COUNT(nota12)+COUNT(nota13)+COUNT(nota14)+COUNT(nota15)),0),1) as final 
FROM alumnos,"
.$row_tablas['tabla'].",ramos 
WHERE alumnos.alumnoid="
.$row_tablas['tabla'].".alumnoid and alumnos.alumnoid='1' and ramos.tabla='".$row_tablas['tabla']."' 
GROUP BY alumnos.alumnoid
) AS tabla
"

De ahí sacás el campo promedio.
De todas maneras recomiendo que migres el diseño de tu base de datos a uno normalizado sino te encontraras con este tipo de consultas gigantes.

Saludos,
  #3 (permalink)  
Antiguo 29/01/2010, 22:43
 
Fecha de Ingreso: enero-2010
Mensajes: 2
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Promedio de una query MYSQL

Excelente. Gracias por la rapidez y la contundencia. En relacion al diseño de la bd, es verdad, pero este esquema tiene otras bondades que no quedan muy claras aqui.

De nuevo, gracias.

Etiquetas: mysql, promedio, query
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 17:55.