1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Usar 2 counts em uma query, no select e join.

Boa tarde, preciso fazer uma query que use 2 selects um dentro do proprio select e outro para um join e conseguir obter duas porcentagens.

SELECT funcionario.nome,preventiva.idPreventiva,concluida,preventiva.data,count(*) as quantidade
FROM preventiva
INNER JOIN `funcionario` funcionario ON preventiva.`idFuncionario` = funcionario.`idFuncionario`
WHERE 
funcionario.`idRegiao` =  1
GROUP BY
funcionario.nome,data,concluida

Aqui eu agrupo pelo funcionário,data e concluida, Logo o count me gera o valor de "preventivas concluidas para aquela data para aquele funcionário" Agora preciso que em uma outra coluna eu obtenha o valor total de preventivas para uma data e um funcionário, ou seja não quero diferenciação dentro da preventiva. Então fiz o seguinte:

SELECT funcionario.nome,preventiva.idPreventiva,concluida,preventiva.data,count(*) as quantidade,t.total,(100/t.total)*count(*) as porcentagem
FROM preventiva
INNER JOIN `funcionario` funcionario ON preventiva.`idFuncionario` = funcionario.`idFuncionario`
 LEFT JOIN(select idPreventiva,COUNT(*) as total,data
 from preventiva
 group by
 idFuncionario,data) as t on t.data = preventiva.data
WHERE 
funcionario.`idRegiao` =  1
GROUP BY
funcionario.nome,data,concluida

Porém o que aconteceu foi que com esse left join primeiro COUNT(*) passou a gerar um valor totalmente diferente.

Segue exemplo da primeira query:

Nome        id    C    data                   Q
Antonio     87    1    2013-03-01 00:00:00    6
Antonio     160    1    2013-04-01 00:00:00    4
Antonio     218    0    2013-05-20 00:00:00    1
Antonio     220    1    2013-05-20 00:00:00    4
Antonio     302    1    2013-06-01 00:00:00    5
Antonio     387    0    2013-07-01 00:00:00    5

id é idPreventiva,C concluida e Q quantidade

Exemplo da segunda:

Nome        id    C    data                   Qu    t    %
Antonio     87    1    2013-03-01 00:00:00    66    4    1650.0000
Antonio     160    1    2013-04-01 00:00:00    52    6    866.6684
Antonio     218    0    2013-05-20 00:00:00    14    5    280.0000
Antonio     220    1    2013-05-20 00:00:00    56    5    1120.0000
Antonio     302    1    2013-06-01 00:00:00    70    5    1400.0000
Antonio     387    0    2013-07-01 00:00:00    70    5    1400.0000

Sendo id o idPreventiva,C concluida,Qu quantidade(que está bem diferente da ultima tabela),t total e % é porcentagem

Sabem como posso resolver isso?

  • Já tentou trocar o LEFT JOIN por INNER JOIN ?

    boaglio   22 de nov de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags mysql select sql ou faça a sua própria pergunta.