Ir para conteúdo

Arquivado

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

Bru_ce

Select dentro de Select

Recommended Posts

Qual a saída disso aqui [inline]select uf, count(t.statusPesquisa) as efetivo from tabela as t where t.statusPesquisa = 2 group by t.statusPesquisa[/inline]?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e essa:

 

select uf, amostra, count(statusPesquisa) from tabela where statusPesquisa = 2 group by statusPesquisa

?

Compartilhar este post


Link para o post
Compartilhar em outros sites

UF

BA

 

AMOSTRA

30

 

count(statusPesquisa)

338

 

Acho que é +/- isso amigo, porém esse 338 não sei de onde saiu ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perdão!! Erro meu. 338 é porquê você tem 338 registros cujo status é igual a 2.<br /><br />A consulta correta é

select uf, amostra, count(statusPesquisa) from tabela where statusPesquisa = 2 group by uf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pensa assim comigo amigo:

Vou dar um exemplo similar:

 

Pensa em uma balada,

Podem entrar pessoas de estados nela:

 

tem na fila 30 pessoas de SP, porém a casa suporta apenas 20 de SP.

Quando entrarem 20 de SP o segurança irá barrar o restante;

 

 

Para o estado não aparecer mais no combobox o número de efetivos tem que ser superior ou igual à amostra entende ..

E para o estado aparecer no combobox o número de efetivos tem que ser inferior à amostra.

 

Você editou o post porque antes tava:

 

Efetivos: 30

Amostra: 20

 

e depois você editou e colocou:

 

Efetivos: 19

Amostra: 20

 

:closedeyes:

 

No exemplo que você deu da balada, meu código faz isso, eu já coloquei os comentários, veja novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Irei tentar basch,

 

 

Evandro, agora a consulta retornou o uf, a amostra e os efetivos ..

 

 

Tentei assim, só que sem resultado ..

 

 

 

 

select uf, amostra, statusPesquisa from tabela where amostra < count(statusPesquisa) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro, agora a consulta retornou o uf, a amostra e os efetivos ..

 

Tentei assim, só que sem resultado ..

select uf, amostra, statusPesquisa from tabela where amostra < count(statusPesquisa) 

 

 

Para esse caso, [inline]count[/inline] demanda [inline]group by[/inline]. Que foi onde estávamos errando na última sugestão que te dei. Quando agrupávamos pelo status da pesquisa, quando o status da pesquisa era sempre 2, ele juntava tudo. Precisávamos agrupar por estado.

 

Isso quer dizer que [inline]select uf, amostra, count(uf) as efetivo from tabela where statusPesquisa = 2 group by uf[/inline] deve retorna o que a gente precisa.

 

O problema é que você não pode usar [inline]count[/inline] como critério de [inline]where[/inline]. Por isso a subconsulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Correto, então ..
Sabe me dizer como ficaria uma subconsulta para selecionar apenas os registros que o total deles forem menor que a amostra ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que nos leva ao mesmo resultado final que eu já havia sugerido anteriormente.

 

Apenas aprimorei sem o LIMIT e ficou assim:

 

select t1.nome, t1.uf from tabela as t1 where t1.amostra > (select count(t2.uf) from tabela as t2 where t2.uf = t1.uf and t2.statusPesquisa = 2 group by t2.uf);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente funcionou Evandro, você É F*** KKKK !
Muito obrigado mano, de coração.

Deus continue lhe dando inteligência.

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.