Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/06/2012, 03:59
bluesky777
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 16 años, 3 meses
Puntos: 8
GROUP BY Me los agrupa todos, no delimita

Hola a todos, hace tiempo hice un tema donde intentaba hacer lo mismo, pero no he podido, me disculpan si tenia que continuar con el tema viejo. Debo sacar los promedios y los puestos de los alumnos, el periodo pasado tocó hacerlo manualmente porque no fué capaz (En este no quiero que sea así).

Creé vista como me aconsejaron aqui:

Código:
CREATE or replace VIEW `vistanotascalculadas` AS select `n`.`idAlumno` AS`idAlumno`,
`a`.`NombresAlum` AS `NombresAlum`,`mg`.`idMaterGrupo` AS `idMaterGrupo`,
`c`.`idCompet` AS `idCompet`,`i`.`Indicador` AS `Indicador`,`i`.`idIndic` AS `idIndic`,
`ga`.`idPeriodo` AS `idPeriodo`,`g`.`idGrupo` AS `idGrupo`,
`g`.`NombreGrupo` AS `NombreGrupo`,
((((`c`.`PorcCompet`* `i`.`PorcIndic`) / 100) * `n`.`Nota` )/100)  AS `NotaDeMateria` 
from ((((((`tbnotas` `n` 
join `tbindicadores` `i`) 
join `tbcompetencias` `c`) 
join `tbmateriagrupo` `mg`) 
join `tbalumnos` `a`) 
join `tbgrupoalumnos` `ga`) 
join `tbgrupos` `g`) 
where ((`n`.`idIndic` = `i`.`idIndic`) 
and (`i`.`CompetenciaIndic` = `c`.`idCompet`) 
and (`mg`.`idMaterGrupo` = `c`.`MateriaGrupoCompet`) 
and (`a`.`idAlum` = `n`.`idAlumno`) 
and (`mg`.`idGrupo` = `g`.`idGrupo`) 
and (`g`.`idGrupo` = `ga`.`idGrupo`) 
and (`ga`.`idAlumno` = `a`.`idAlum`)) 
order by `n`.`idAlumno`
NotaDeMateria es lo que necesito que se sume por materia (idMaterGrupo), y luego lo promedio para sacar el puntaje final del alumno. Lo hago así en php:

Código:
$sqlMat="select idAlumno, NombresAlum, idMaterGrupo, SUM(NotaDeMateria) AS PromMater 
from `vistanotascalculadas`
where idAlumno=".$rSqlAl['idAlumno']." and idPeriodo=".$_SESSION['PeriodoUsu']."
GROUP BY idMaterGrupo";
Aquí es donde me agrupa sumando todas las NotaDeMateria sin hacer distinción de periodo Sin embargo me doy cuenta que no debo tener una vista así pues cada periodo se está multiplicando de forma terrible con todas las notas existentes. Así que opté por hacer una vista por periodo:



Código:
CREATE or replace VIEW `vistanotascalculadasper1` AS 
SELECT `n`.`idAlumno` AS`idAlumno`, `a`.`NombresAlum` AS `NombresAlum`,
`mg`.`idMaterGrupo` AS `idMaterGrupo`, `c`.`idCompet` AS `idCompet`,`i`.`Indicador` AS `Indicador`,
`i`.`idIndic` AS `idIndic`, `ga`.`idPeriodo` AS `idPeriodo`,`g`.`idGrupo` AS `idGrupo`, 
`g`.`NombreGrupo` AS `NombreGrupo`, 
((((`c`.`PorcCompet`* `i`.`PorcIndic`) / 100) * `n`.`Nota` )/100) AS `NotaDeMateria` 
from ((((((`tbnotas` `n` 
join `tbindicadores` `i`) 
join `tbcompetencias` `c`) 
join `tbmateriagrupo` `mg`) 
join `tbalumnos` `a`) 
join `tbgrupoalumnos` `ga`) 
join `tbgrupos` `g`) 
where ((`n`.`idIndic` = `i`.`idIndic`) 
and (`i`.`CompetenciaIndic` = `c`.`idCompet`) 
and (`mg`.`idMaterGrupo` = `c`.`MateriaGrupoCompet`) 
and (`a`.`idAlum` = `n`.`idAlumno`) 
and (`mg`.`idGrupo` = `g`.`idGrupo`) 
and (`g`.`idGrupo` = `ga`.`idGrupo`) 
and (`ga`.`idAlumno` = `a`.`idAlum`) 
) AND `idPeriodo`=1 
order by `n`.`idAlumno`
Luego con php:

Código:
$sqlMat="select idAlumno, NombresAlum, idMaterGrupo, SUM(NotaDeMateria) AS PromMater 
from `vistanotascalculadasper".$_SESSION['PeriodoUsu']."`
where idAlumno=".$rSqlAl['idAlumno']." 
GROUP BY idMaterGrupo";
vistanotascalculadasper1 no me hace distinción entre periodos tampoco, ¿Cómo hago para hacer una vista por periodo y sacar los puestos?(Esto es lo q necesito).

La primera vista, aunque ya no me parece una opción, me gustaría que me explicaran por qué no agrupa por periodo, pues la trabajé mucho y no entiendo porqué me agrupa sin tener en cuenta el periodo.