Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leoneh

Fazer "count" retornar contagem quando resultado for igual a &

Recommended Posts

Pessoal estou tendo o seguinte problema. ao realizar a consulta abaixo os resultados aparecem normalmente, porem as contagens com valor 0 não aparecem e preciso delas para tratar o resultado na aplicação.

OBS: Sou completamente leigo em relação a "SQL".

SELECT clientes.`instalacao`, clientes.`periodo` , COUNT(clientes.`instalacao`) 
FROM `clientes` WHERE `periodo`= 'Tarde'  
GROUP BY  STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y')  DESC LIMIT 30

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei se utilizei o 'HAVING' da maneira correta mas não resolveu meu problema.

 

Exemplo

SELECT clientes.`instalacao`, clientes.`periodo` , COUNT(clientes.`instalacao`) 
FROM `clientes` WHERE `periodo`= 'Tarde'  
GROUP BY  STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y')  DESC  
having COUNT(clientes.`instalacao`) >= 0 LIMIT 30

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usou certo , eu que entendi errado o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso vc quer saber clientes que não são "tarde" , correto !?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, exatamente mas quando o valor e "0" o resultado e ignorado.

SELECT clientes.`instalacao`, clientes.`periodo` , COUNT(clientes.`instalacao`) 
FROM `clientes` 
WHERE `periodo`= 'Tarde' 
GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC 
having COUNT(clientes.`instalacao`) >= 0 LIMIT 30

Me retorna o seguinte

Capturar30e37.png

O problema e que no dia 02-07-2016 não houve nenhum registro tarde Portanto foi ignorado na consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solucao é usar o CASE

 

 

 

SELECT clientes.`instalacao`, clientes.`periodo` ,

Sum(Case when `periodo`= 'Tarde' then 1 else 0 end)

FROM `clientes`

WHERE `periodo`= 'Tarde'

GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC

LIMIT 30

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT clientes.`instalacao`, clientes.`periodo` , 
Sum(Case when `periodo`= 'Tarde' then 1 else 0 end)
FROM `clientes` 
WHERE `periodo`= 'Tarde' 
GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC
LIMIT 30 

Tentei dessa forma mas o resultado foi o mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT clientes.`instalacao`, clientes.`periodo` , Sum(Case when `periodo`= 'Tarde' then 1 else 0 end)

FROM `clientes`

GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC LIMIT 30

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT clientes.`instalacao`, clientes.`periodo` , Sum(Case when `periodo`= 'Tarde' then 1 else 0 end)

FROM `clientes`

GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC LIMIT 30

\o/\o/\o/, muito obrigado, agora funcionou perfeitamente.

 

Ficou assim

SELECT clientes.`instalacao`, clientes.`periodo` , Sum(Case when `periodo`= 'Tarde' then 1 else 0 end) resultadotd
FROM `clientes` 
GROUP BY STR_TO_DATE(clientes.`instalacao`,'%d-%m-%Y') DESC LIMIT 30

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.