Como aplicar o cálculo de frequência de alunos em query MySQL?
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á!!!
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
Curtidas 0
Melhor post
Luiz Santos
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.
Grande abs
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
GOSTEI 1
Mais Respostas
Myller Meireles
21/07/2018
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?
Um abraço!
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!
GOSTEI 0
Myller Meireles
21/07/2018
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
GOSTEI 0
Luiz Santos
21/07/2018
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
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
GOSTEI 0
Myller Meireles
21/07/2018
Grande Luiz Fernando,
Amigo, com sua ajuda consegui fazer a query rodar parcialmente do jeito que preciso. Ela ficou assim:
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:
Aí a tristeza fica aqui do meu lado me olhando...!!! rsrsrsrs
O que tá errado?!
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?!
GOSTEI 0