Resolvido: Problemas com COUNT() + JOIN no MySQL

Há algum tempo eu vinha sofrendo algum ataque de melancolia quando o assunto se tratava de COUNT+JOIN+GROUP em banco de dados. Deixa eu explicar qual era o problema, veja esse comando SQL:

SELECT COUNT(c.codigo) AS total FROM fa_curriculo c
LEFT JOIN fa_curriculo_x_area cxa
ON cxa.cod_curriculo = c.codigo

O resultado desse comando estava produzindo o resultado: 7, porém quando colocava o GROUP BY no final da Query o resultado produzido era parecido com esse:

| total |
| 1      |
| 1      |
| 1      |
| 1      |
| 3      |

Aí eu fiquei muito indignado, fucei a internet inteira pra ver se alguém já tinha passado pelo mesmo problema, porém ninguém com uma solução aplausível. Eu achei por acaso uma pessoa que colocava a solução no meio de um contexto totalmente fora, aí eu falei: “Vou testar, mas isso não vai funcionar”. Advinha?! Não é que funcionou!!!! Olha a maracutáia:

SELECT COUNT(DISTINCT c.codigo) AS total FROM fa_curriculo c
LEFT JOIN fa_curriculo_x_area cxa
ON cxa.cod_curriculo = c.codigo

Resultado produzido: 5 (Exatamente o esperado, e não é que faz sentido?)

Eu espero que isso ajude mais pessoas.

Obrigado!

4 respostas para “Resolvido: Problemas com COUNT() + JOIN no MySQL”

  1. Caro Andrei,

    Agradeço imensamente por ter compartilhado essa solução. Eu estava exatamente na mesma situação e graças a você eu resolvi.

    Veja que engraçado, eu tinha pensado em usar o distinct, mas não vi sentido nenhum em sua utilização, por isso saí a caça de alguma solução na internet e… à exceção desta sua página… nada.

    Obrigado mais uma vez.

    Abraço.

  2. Nossa… estava passando pelo mesmo problema que o de vocês, e só achei a solução aqui…. estava quebrando a cabeça e não encontrando nada na internet…
    Agora funcionou perfeitamente com essa sua dica!! Nem imaginava isso…
    Muito obrigado amigo, é muito bom trocarmos dicas porque assim um vai ajudando sempre o outro.
    Deus te abençoe sempre!!
    Grande abraço.
    Fabio.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *