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

Tabla de posicion con promedio

Estas en el tema de Tabla de posicion con promedio en el foro de Mysql en Foros del Web. Hola, hace poco hice una tabla de posicion donde los alumnos con mejores promedios son ordenados de mayor a menor en cada materia, hasta alli ...
  #1 (permalink)  
Antiguo 18/09/2011, 16:28
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Pregunta Tabla de posicion con promedio

Hola, hace poco hice una tabla de posicion donde los alumnos con mejores promedios son ordenados de mayor a menor en cada materia, hasta alli todo bien... el problema viene cuando intente ordenar los alumnos con mejor promedio, es decir, la sumatoria y division entre la misma cantidad de materias debe dar un resultado y luego necesito hacer una tabla de posiciones con los alumnos con mejor promedio ¿como logro esto?

saludos y gracias de antemano!
  #2 (permalink)  
Antiguo 18/09/2011, 19:23
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Tabla de posicion con promedio

Si muestras el codigo que ya tienes para ordenar por promedio/materia y lo que has intentado lograr para promedio general sera mas facil tratar de ayudarte, aunque parece no ser tan dificil, pero el tema es mas conveniente para la seccion de bases de datos que para PHP.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 19/09/2011, 08:32
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Hola Triby gracias por responder. Ok, yo tengo esto:

Código PHP:
<?php
$link 
mysql_connect ("localhost""root""");
mysql_select_db("bdalumnos"$link);
$pos 0;
$result mysql_query("SELECT matematicas, nombre FROM alumnos ORDER BY matematicas DESC LIMIT 10 "$link);
while (
$row mysql_fetch_row($result)){
$pos++;
//se imprime la tabla...
}
Eso para el caso de matematicas, pero para cada materia tengo una tabla... y lo que necesito es sumar la puntuacion de por ejemplo: matematicas, castellano, historia, ect. De cada alumno y de alli sacar otra tabla con los mejores promedios de los alumnos.

Saludos y gracias!
  #4 (permalink)  
Antiguo 19/09/2011, 10:32
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Bueno, lo solucione de esta manera (o aparentemente lo hice)...:

Código PHP:
$result mysql_query("SELECT ROUND((matematicas+castellano+etc)/3), nombre  FROM usuarios ORDER BY ROUND((matematicas+castellano+etc)/3) DESC LIMIT 10 "$link); 
Pero ahora quiero ir un poco mas alla y creo que se me complica un poco... me gustaria que ahora se ordenara en una tabla las secciones con mejor promedio, es decir, ya no van a aparecer los alumnos en la tabla si no las secciones con mejor promedio. Me imagino que a lo anterior le debo agregar algo pero en este momento estoy bloqueado XD (tengan en cuenta que todos los alumnos de todas las secciones estan en la misma base de datos)

Saludos y gracias!
  #5 (permalink)  
Antiguo 19/09/2011, 12:31
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Hola de nuevo, logre solucionarlo de esta manera:

Código PHP:
$result mysql_query("SELECT SUM(ROUND((matematicas+castellano+etc)/3)) totalseccion, nombre  FROM usuarios GROUP BY seccion ORDER BY totalseccion DESC LIMIT 10 "$link); 
Todo bien, pero ahora me gustaria que al momento de hacer la seleccion se haga la sumatoria de los cinco mejores promedios. Algo como si se pudiera hacer esto:

Código PHP:
mysql_query("SELECT SUM(ROUND((matematicas+castellano+etc)/3)) totalseccion DESC LIMIT 5 
Se que esto no funciona pero es para que se entienda mas o menos lo que quiero hacer...

Saludos!
  #6 (permalink)  
Antiguo 19/09/2011, 13:37
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Tabla de posicion con promedio

Porque usas ROUND()?... supongo que te serviria mas PROM() porque realiza la operacion adecuada y no tendrias que realizar calculos posteriores en PHP para mostrarlo; para evitar repetir la formula en el ORDER BY:

Código SQL:
Ver original
  1. SELECT PROM('aqui las operaciones') AS promedio FROM tabla ORDER BY promedio
Nota: Esto del alias para la operacion si lo usas en el ultimo codigo.


Lo otro de calcular promedio de los 5 mejores alumnos por seccion creo que si requiere una "subconsulta" y no soy capaz de sugerirte algo, mas alla de visitar la seccion de MySQL.
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 19/09/2011, 14:04
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Realmente utilice ROUND() porque investigando llege a eso... no tenia conocimiento del PROM() te agradezco mucho la ayuda!

Saludos!
  #8 (permalink)  
Antiguo 19/09/2011, 17:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Tabla de posicion con promedio

¿PROM()? ¿De dónde sacaste eso?

En todo caso lo que corresponde es AVG().
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 20/09/2011, 07:08
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Hola gnzsoloyo, ¡perfecto! el AVG() saca promedio... ¡es justo lo que necesitaba! ¿pero existe una manera de decirle que solo me tome los cinco primeros mas alto?

gracias pos tu ayuda!
  #10 (permalink)  
Antiguo 20/09/2011, 09:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Tabla de posicion con promedio

Para eso sólo necesitas indicarle al final un
Código MySQL:
Ver original
  1. ORDER BY promedio DESC
donde "promedio" sería el alias aplicado a la columna donde usas el AVG(). LIMIT en este caso está indicando que devuelva los primeros 5 del conjunto resultado, ordenados de mayor a menor.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 20/09/2011, 11:55
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Creo que no me explique bien lo que necesito es que tome los cinco primeros al momento de hacer el SELECT (como una muestra) es decir, no quiero que tome todos los alumnos si no solo los primeros cinco "con nota mas alta" y de alli sacar el promedio... es como si uno pudise hacer esto:

Código PHP:
mysql_query("SELECT AVG((matematicas+castellano+etc)/3)) totalseccion DESC LIMIT 5... 
Se que no se puede... pero es para que se entienda.
  #12 (permalink)  
Antiguo 20/09/2011, 14:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Tabla de posicion con promedio

No sé si esta es la idea
SELECT t1.idalumno, ROUND(t1.media,2) notamedia FROM (SELECT idalumno, ((notamatematicas + notalengua + notafisica)/3) media FROM tutabla ORDER BY media DESC)t1 LIMIT 5

No nos has dicho si esas notas están en una tabla de notas o en campos diferentes de una tabla. De ahí que te haya puesto esa suma de campos dividida por el número de campos.
  #13 (permalink)  
Antiguo 21/09/2011, 07:50
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Hola jurena, gracias por responder. No entiendo la parte de "t1.idalumno" que funcion cumple? disculpame, soy muy novato en esto .
  #14 (permalink)  
Antiguo 21/09/2011, 14:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Tabla de posicion con promedio

LuisCZ,
se trata de que haces una subconsulta sobre una consulta a la que le ponemos un alias. Este t1 es el alias de la consulta incluida entre paréntesis. Luego ejecutamos una subconsulta sobre esa consulta, y hay que poner el nombre, en este caso el alias delante de los campos incluidos en la consulta.
  #15 (permalink)  
Antiguo 23/09/2011, 14:10
Avatar de LuisCZ  
Fecha de Ingreso: noviembre-2009
Ubicación: Maracaibo
Mensajes: 127
Antigüedad: 14 años, 4 meses
Puntos: 0
Respuesta: Tabla de posicion con promedio

Hola jurena, me funciono bien! muchas gracias!

Etiquetas: posicion, promedio, tabla
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 14:17.