/*se verifica si el alumno pierde el ano deacuerdo al 
maximo de areas q puede perder en el a?o*/
select id_alu , apr.tot_are_per,if(apr.tot_are_per>=maxi_area_perd,'n','s') as aprueba  from(
	select id_alu,count(are_fin) as tot_are_per from (
	/*se saca las areas perdidas de acuerdo al maximo de materias para 
	perder el area en la tabla area*/ 
	select t.* from (
		/*se cuenta las materias perdidas por area*/
		select id_alu,are_fin,val_apr,count(val_apr) as tot from (
			/*se calcula el promedio de las materias especiales agrupadas por area */
				select id_alu,are_fin as cod_mat, are_fin, esp_mat, avg(nota_d) as def
				from seg_final 
				where esp_mat='s' and (id_peri<>( select id_peri from periodo where per_not_fin='s') ) /*ALU*/
				group by id_alu,are_fin
				union 
			/*se calcula el promedio de las materias NO especiales agrupadas por materia*/
				select id_alu, cod_mat, are_fin  , esp_mat, avg(nota_d) as def
				from seg_final 
				where esp_mat='n' and  (id_peri<>( select id_peri from periodo where per_not_fin='s') ) /*ALU*/
				group by id_alu,cod_mat
			
			) s
			inner join rangos_valora r on s.def >= r.min and s.def <= r.max 
			inner join tipvalora v on v.id_val=r.id_val
			where val_apr='n'
			group by id_alu,are_fin,val_apr
		) t
		inner join area b  on b.cod_are=t.are_fin
		where max_repro<=tot
	) a_perd
	group by  id_alu
) apr
inner join anolectivo on actual='s' 