Tenho estas tabelas.
Tabela Usuarios:
id
nome,
outras colunas que não interferem
Tabela revisor_tecnico:
idprofessor
idatividadeacademica
outras colunas que não interferem
Tabela Atividade Acadêmica:
id
descrição
outras colunas que não interferem
Tabela Questões:
id
idRevisor
outras colunas que não interferem
Preciso Pegar todos o Nomes dos usuários que são revisores, nome da sua Atividade acadêmica e contar quantas questões estão vinculadas a ele.
Só consegui chegar até aqui:
select U.nome as nome, AA.descricao as Disciplina from usuarios U
INNER JOIN revisores_tecnicos as RT ON RT.idProfessor = U.id
INNER JOIN atividadeacademica_professor as AP on AP.idAtividadeAcademica = RT.idAtividadeAcademica
INNER JOIN atividadeacademica as AA on AA.id = AP.idAtividadeAcademica
INNER JOIN questoes as Q on Q.idRevisor;
Alguém me da uma luz?
Sempre que usar funções como COUNT, MAX, MIN, AVG, SUM, etc, vc precisa usar agrupamento, no seu caso, após os inner join:
GROUP BY U.nome, AA.descricao
E lá no SELECT…
select U.nome as nome, AA.descricao as Disciplina, COUNT(Q.id) AS questoes from...
Aliás, pelo que vc postou, faltou vincular as questoes ao usuario que a digitou, pq parou no Q.idRevisor?
cortei o resto do código sem querer quando copiei e colei. vou tentar fazer oque você falou.
select U.nome as nome, AA.descricao as Disciplina, COUNT(Q.id) as QTD from usuarios U
INNER JOIN revisores_tecnicos as RT ON RT.idProfessor = U.id
INNER JOIN atividadeacademica_professor as AP on AP.idAtividadeAcademica = RT.idAtividadeAcademica
INNER JOIN atividadeacademica as AA on AA.id = AP.idAtividadeAcademica
INNER JOIN questoes as Q on Q.idRevisor = U.id GROUP BY U.nome, AA.descricao;
Fiz assim, consegui contar. mas alguma coisa está errado. pois a contagem está errada.
O usuário de id 19 tem 31 questões e na minha query ficou com QTD = 93.
Agora foi. era um join que não precisava. kkk
select U.nome as nome, AA.descricao as Disciplina, COUNT(Q.id) from usuarios U INNER JOIN revisores_tecnicos as RT ON RT.idProfessor = U.id INNER JOIN atividadeacademica as AA on AA.id = RT.idAtividadeAcademica INNER JOIN questoes as Q on Q.idRevisor = U.id and Q.idAtividadeAcademica = RT.idAtividadeAcademica GROUP BY U.nome, AA.descricao
Muito obrigado mano.
Como eu poderia fazer outro count mas com questões com situação igual a 3, Q.situacao = 3 e depois subtrair do valor de count QTD?
Ai teria que usar case:
...COUNT(Q.id), COUNT(CASE Q.situacao WHEN 3 THEN 1 ELSE 0 END) FROM...
Ou if:
...COUNT(Q.id), COUNT(IF(Q.situacao = 3, 1, 0)) FROM...
E pra ter a diferença algo nesse sentido:
...COUNT(Q.id), COUNT(Q.id) - COUNT(IF(Q.situacao = 3, 1, 0)) FROM...
Vai brincando, é assim que se aprende