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

Consulta con promedios y porcentajes.

Estas en el tema de Consulta con promedios y porcentajes. en el foro de Mysql en Foros del Web. Hola a todos, espero me puedan ayudar muy bondadosamente como siempre lo hacen ;) Realizo un sistema de gestión de boletines para colegios, y manejo ...
  #1 (permalink)  
Antiguo 25/03/2012, 21:09
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Consulta con promedios y porcentajes.

Hola a todos, espero me puedan ayudar muy bondadosamente como siempre lo hacen ;)

Realizo un sistema de gestión de boletines para colegios, y manejo Materias, las cuales tienen Competencias(todas las que desee poner el profesor) y cada Competencia tiene indicadores, los cuales son a los que se le asignan notas.

Cada Competencia tiene un porcentaje, que sumados dan el 100% de la materia, y los indicadores de una Competencia, suman el 100% de esta(la competencia).
Mas o menos así en resumen:

tbCompetencia
idComp (clave)
Definicion
Porcentaje
idMateria

tbIndicadores
idInd (clave)
Definicion
Porcentaje
idComp

tbNotas
idIndic (clave)
idAlum (clave)
Nota

Estoy haciendo el reporte de boletines con php (No es la duda ahora no desviemos el tema por fa). Deseo saber existe una consulta que me saque los totales de los promedios de los indicadores y de las competencias.... o .... mejor dicho deseo hacer una consulta que me muestre la nota final (usando los porcentajes obviamente). Empece así:

Código:
$sqlComp="SELECT * FROM tbcompetencias c, tbindicadores i, tbnotas n 
where c.idCompet=i.CompetenciaIndic and i.idIndic=n.idIndic and c.PeriodoCompet=1
and MateriaGrupoCompet=".$rSqlMat['idMaterGrupo']." and n.idAlumno=256";
Sé que puedo hacer una consulta, y recorrerla con el while, y para ir promediando indicador por indicador, pero me parece engorroso. Perdonen mi ignorancia. Mil Gracias!!
  #2 (permalink)  
Antiguo 26/03/2012, 02:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta con promedios y porcentajes.

MateriaGrupoCompet??? de que tabla lo sacas....???

c.PeriodoCompet en la tabla "tbCompetencia" que nos muestras no esta este campo pero supongamos que si esta...

Código MySQL:
Ver original
  1. SELECT i.idInd,i.Definicion, AVG(i.Porcentaje*n.nota)
  2. FROM (tbcompetencias c
  3.                     INNER JOIN tbindicadores i
  4.                                ON c.idCompet=i.CompetenciaIndic)
  5.                     INNER JOIN tbnotas n
  6.                                ON  i.idIndic=n.idIndic
  7. WHERE c.PeriodoCompet=1
  8.          and MateriaGrupoCompet=".$rSqlMat['idMaterGrupo']."
  9.          and n.idAlumno=256
  10. GROUP BY i.idInd,i.Definicion;

No se si esto tiene sentido puesto que no acabo de entender que promedio quires sacar ni como opera con la nota....

En todo caso lo que parece que estas buscando es el GROUP BY y AVG

http://dev.mysql.com/doc/refman/5.0/...functions.html
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 26/03/2012 a las 02:11
  #3 (permalink)  
Antiguo 26/03/2012, 07:17
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Consulta con promedios y porcentajes.

Muchas gracias por responder. He probado la solución pero no da aun el resultado deseado, tuve que modificarlo así:

Código:
SELECT i.idIndic,i.Indicador, AVG((i.PorcIndic/100)*n.Nota)
FROM (tbcompetencias c 
        INNER JOIN tbindicadores i 
        ON c.idCompet=i.CompetenciaIndic)
                    INNER JOIN tbnotas n 
                    ON  i.idIndic=n.idIndic
WHERE c.PeriodoCompet=1
         AND MateriaGrupoCompet="160" 
         AND n.idAlumno=256
GROUP BY i.idIndic,i.Indicador;
MateriaGrupoCompet es la materia a la que le quiero sacar el promedio del alumno 256.

Me explico mejor con un ejemplo. En el boletín necesito que le aparezca algo así:

MATEMÁTICAS....................................... ....... 77
1. Aplico Álgebra en mi vida..........................................60%-75
a. Taller 1--------------------------------------50%-50
b. Examen 1-----------------------------------50%-100

2. Manipulo problemas reales.......................................40%-80
a. Cuaderno------------------------------------100%-80

En este ejemplo puse que matemáticas tiene 2 competencias, una vale el 60% y la otra 40%. Dentro de la primera hay 2 indicadores, cada uno vale el 50%, en uno el alumno sacó 50 y en el otro sacó 100. Por último la segunda competencia vale el 40% y solo tiene un indicador, el cual obviamente vale el 100% de la competencia, y el alumno sacó 80.

Por favor siganme ayudando, acaso es necesario hacer varias consultas, osea, estoy intentando con una:
1. Llamo las competencias y recorro cada una con un while (php - mysql_fetch_array)
2. Llamo los indicadores de la competencia en la que va el while y los recorro con otro while.
3. Llamo las notas de ese alumno y del indicador en el que va el anterior while, multiplicando cada nota por el porcentaje y voy sumando el resultado en variables.

Estoy dandole a eso, estoy bastante preocupado, lo necesito urgente. Mil gracias a todos.

PD: Los porcentajes son guardados como enteros, NO como 0.3 para indicar que es 30%.
  #4 (permalink)  
Antiguo 26/03/2012, 07:22
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Consulta con promedios y porcentajes.

Estoy estudiando los group by, parece que sí pueden servir, sin embargo siganme hechando una manita plis.
  #5 (permalink)  
Antiguo 26/03/2012, 09:29
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Consulta con promedios y porcentajes.

Parece que cada vez estoy más cerca, he hecho esto basado en lo que me diste:

SELECT sum(r.ValorNota) ValorCompetencia, r.PorcCompet from
(SELECT i.CompetenciaIndic,c.PorcCompet, i.idIndic,i.Indicador, AVG((i.PorcIndic/100)*n.Nota) ValorNota
FROM (tbcompetencias c
INNER JOIN tbindicadores i
ON c.idCompet=i.CompetenciaIndic)
INNER JOIN tbnotas n
ON i.idIndic=n.idIndic
WHERE c.PeriodoCompet=1
AND MateriaGrupoCompet="160"
AND n.idAlumno=256
GROUP BY i.idIndic,i.Indicador) r

group by (r.CompetenciaIndic) ) r2

group by R2.ValorCompetencia

Eso manda los valores de las competencias(ej: 39.225 - 21.8625 - 22.425) pero falta que se sumen para que me de la definitiva. En realidad quiero hacer que me de la materia con la definitiva, solo que en este ejemplo solo lo hice con una materia(MateriaGrupoCompet="160").

La verdad no estoy seguro de lo que estoy haciendo, me podrían explicar un poco como trabaja esta consulta (parece tonto q la hice pero no la entiendo bien) y como la termino. Gracias, espero respuesta.
  #6 (permalink)  
Antiguo 26/03/2012, 11:18
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta con promedios y porcentajes.

Sigues sin decirme de que tabla sale el campo MateriaGrupoCompet ni el campo PeriodoCompet. Voy a suponer que es el idMateria de tbCompetencia y que PeriodoCompet tambien esta en esa tabla.

En una sola consulta el tema esta complicado, se puede llegar a los resultados parciales o al final, pero a todos....

DatosBase
Código MySQL:
Ver original
  1. SELECT tbCompetencia.idComp,
  2.            tbCompetencia.Definicion AS Competencia,
  3.            tbCompetencia.Porcentaje/100 AS PCompetencia,
  4.            tbIndicadores.idInd, tbIndicadores.Definicion AS Indicador,
  5.            tbIndicadores.Porcentaje/100 AS PIndicador, tbNotas.Nota,
  6.            tbCompetencia.idMateria,
  7.            tbNotas.idAlum,
  8.            tbCompetencia.PeriodoCompet
  9. FROM (tbCompetencia
  10.               INNER JOIN tbIndicadores
  11.                   ON tbCompetencia.idComp = tbIndicadores.idComp)
  12.               INNER JOIN tbNotas
  13.                   ON tbIndicadores.idInd = tbNotas.idIndic
  14. WHERE tbCompetencia.idMateria=1
  15.     AND tbNotas.idAlum=256
  16.     AND tbCompetencia.PeriodoCompet=1;


NotasComptencia (usa DatosBase)
Código MySQL:
Ver original
  1. SELECT DatosBase.idMateria,
  2.            DatosBase.idAlum,
  3.            DatosBase.PeriodoCompet,
  4.            DatosBase.idComp,
  5.            DatosBase.Competencia,
  6.            DatosBase.PCompetencia,
  7.            Sum([PIndicador]*[Nota]) AS NotaCompetencia
  8. FROM DatosBase
  9. GROUP BY DatosBase.idMateria,
  10.               DatosBase.idAlum,
  11.               DatosBase.PeriodoCompet,
  12.               DatosBase.idComp,
  13.               DatosBase.Competencia,
  14.               DatosBase.PCompetencia;

Usando NotasComptencia
Código MySQL:
Ver original
  1. SELECT NotasComptencia.idMateria,
  2.   Sum(NotasComptencia.PCompetencia*NotasComptencia.NotaCompetencia) AS NotaMateria
  3. FROM NotasComptencia
  4. GROUP BY NotasComptencia.idMateria;

Puedes armar uns super consulta que te de el ultimo de los resultados pero no todos a la vez...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 26/03/2012, 15:17
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Consulta con promedios y porcentajes.

Muchas gracias quimfv, sin embargo hay algo que no entiendo. Cuando me dices DatosBase, parece que te refirieras a hacer una tabla con los resultados de esa consulta, para luego seguir haciendo consultas a esa tabla resultante, pero no sé como se haría eso en php.

A menos que lo que me estés sugiriendo sea que recorra los resultados con un while creando una consulta NotasComptencia en cada entrada del while.

No entiendo bien lo que me propones, pero aun así me da ideas de como resolver el problema. Muchas gracias, Dios te bendiga. Aun espero respuestas.
  #8 (permalink)  
Antiguo 26/03/2012, 15:48
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta con promedios y porcentajes.

Recorrer los resultados és una solución....pasas el resultado de la consulta a un array y listos...

Pero mira el tema VIEW de MySql, y el uso de subquerys...

http://dev.mysql.com/doc/refman/5.0/es/create-view.html
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 26/03/2012, 18:50
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Consulta con promedios y porcentajes.

Muchísimas gracias, me ha resultado recorriendo arrays, sin embargo no me gusta, voy a ver si alcanzo a hacer lo de las vistas, es una gran posibilidad, voy a estudiarlas.

Que Dios te prospere a ti y a toda tu familia, y gracias por este foro.

Etiquetas: php, promedios, select, sql
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 13:16.