Como aplicar o cálculo de frequência de alunos em query MySQL?

21/07/2018

0

Olá amigos, boa noite!

Tenho a tabela "frequencia_aluno" no meu BD com os seguintes campos: "ID, ID_ALUNO, ID_TURMA e FREQUENCIA" e gostaria de fazer uma consulta ao campo "FREQUENCIA". Explicando, o campo frequencia armazena apenas 1 dos 3 dados: Presença (P) ou Falta Justificada (FJ) ou Falta (F).

Meu problema está em fazer a contagem no campo "frequencia" para aplicar a fórmula abaixo, ou seja, o aluno de ID 100 já recebeu (hipoteticamente) 10 presenças (P), 2 faltas justificadas (FJ) e 4 faltas (F)... se houver uma possibilidade de fazer um count(*) para identificar esse valores separadamente, vou ter como aplicar a fórmula abaixo:

Freq% = Total_P_FJ_F / 100 x Total_P = X%

Alguém consegue me ajudar nisso?! Serve uma outra sugestão também!!!

Grato desde já!!!
Myller Meireles

Myller Meireles

Responder

Post mais votado

22/07/2018

Myller

Tem como resolver isso em procedure.
Em uma única query também, mas ela pode ficar lenta.
Não sei dizer se existe a função PIVOT no MySQL.

Tenta isso.

SELECT T.ID_ALUNO
     , SUM(T.P)  AS P
	 , SUM(T.FJ) AS FJ
	 , SUM(T.F)  AS F
FROM(
	SELECT ID_ALUNO
		 , COUNT(1) AS P
		 , 0        AS FJ
		 , 0        AS F	 
	  FROM frequencia_aluno
	 WHERE frequencia = 'P'
	 GROUP BY ID_ALUNO
	 UNION ALL
	SELECT ID_ALUNO
		 , 0        AS P
		 , COUNT(1) AS FJ
		 , 0        AS F	 
	  FROM frequencia_aluno
	 WHERE frequencia = 'FJ'
	 GROUP BY ID_ALUNO
	 UNION ALL
	SELECT ID_ALUNO
		 , 0        AS P
		 , 0        AS FJ
		 , COUNT(1) AS F	 
	  FROM frequencia_aluno
	 WHERE frequencia = 'F'
	 GROUP BY ID_ALUNO
) AS T
GROUP BY T.ID_ALUNO


Grande abs

Luiz Santos

Luiz Santos
Responder

Mais Posts

22/07/2018

Myller Meireles

Luis Fernando,

Muito obrigado por responder!

Sua sugestão deu muito certo! Porém, preciso fazer uma consulta em outras 3 tabelas e minha dúvida está onde devo inserir o trecho abaixo do código, dentro do código que você me passou?

from alunos a, frequencia_aluno f, montar_turma m, curso c


Um abraço!
Responder

22/07/2018

Myller Meireles

Opa... me desculpe, o código foi incompleto... o trecho completo é o que segue abaixo:

FROM frequencia f, montar_turma t, alunos a, curso c
WHERE f.turma = 39 and f.id_aluno = m.freq_id_aluno and a.alu_id = m.freq_id_aluno and c.curso_id = 326

Responder

23/07/2018

Luiz Santos

Oi Myller.
Depende.
Se vc não precisar de mais campos, faz fora daquela query grandona.
Se tiver que trazer, aí vc faz dentro.
Mas se fizer dentro, tem que fazer nas 3 de dentro.

Grande abs
Responder

23/07/2018

Myller Meireles

Grande Luiz Fernando,

Amigo, com sua ajuda consegui fazer a query rodar parcialmente do jeito que preciso. Ela ficou assim:

SELECT T.ID_ALUNO
     , SUM(T.P)  AS P
     , SUM(T.FJ) AS FJ
     , SUM(T.F)  AS F
FROM(
    SELECT ID_ALUNO
         , COUNT(1) AS P
         , 0        AS FJ
         , 0        AS F     
      FROM frequencia_aluno fa, montar_turma mt, alunos a, curso c
     WHERE fa.freq = 'P' and fa.turma = turma and fa.id_aluno = mt.freq_id_aluno and a.alu_id = mt.freq_id_aluno and c.curso_id = curso and mt.freq_id_turma = turma
     GROUP BY a.alu_id
     UNION ALL
    SELECT ID_ALUNO
         , 0        AS P
         , COUNT(1) AS FJ
         , 0        AS F     
      FROM frequencia_aluno fa, montar_turma mt, alunos a, curso c
     WHERE fa.freq = 'P' and fa.turma = turma and fa.id_aluno = mt.freq_id_aluno and a.alu_id = mt.freq_id_aluno and c.curso_id = curso and mt.freq_id_turma = turma
     GROUP BY a.alu_id
     UNION ALL
    SELECT ID_ALUNO
         , 0        AS P
         , 0        AS FJ
         , COUNT(1) AS F     
      FROM frequencia_aluno fa, montar_turma mt, alunos a, curso c
     WHERE fa.freq = 'P' and fa.turma = turma and fa.id_aluno = mt.freq_id_aluno and a.alu_id = mt.freq_id_aluno and c.curso_id = curso and mt.freq_id_turma = turma
     GROUP BY a.alu_id
) AS T
GROUP BY T.ID_ALUNO


Em localhost, se eu tirar os parâmetros URL "turma" e "curso" e substituí-los por números respectivos a turma e curso, ela roda perfeitamente e me traz o resultado esperado, mas quando eu coloco os parâmetros URL ($_GET['turma'] e $_GET['curso']), no ambiente de produção para teste com o navegador , dá o erro abaixo:

MySQL Error#: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') AS T GROUP BY T.ID_ALUNO' at line 2


Aí a tristeza fica aqui do meu lado me olhando...!!! rsrsrsrs

O que tá errado?!
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar