Como aplicar o cálculo de frequência de alunos em query MySQL?
21/07/2018
0
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
Post mais votado
22/07/2018
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
Mais Posts
22/07/2018
Myller Meireles
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!
22/07/2018
Myller Meireles
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
23/07/2018
Luiz Santos
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
23/07/2018
Myller Meireles
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?!
Clique aqui para fazer login e interagir na Comunidade :)