SQL. Retornar quantidade de linhas encontradas [RESOLVIDO]

6 respostas
A

Bom dia,

eu tenho um código sql para retornar a quantidade de serviços cadastrados em uma cidade. Só que ele me retorna várias linhas com a quantidade de fornecedores de serviço por serviço.

O código esta assim:

SELECT count(*) as qtd 
FROM servicos s INNER JOIN servicos_cliente sc ON s.codigo = sc.codigo_servico
		INNER JOIN clientes c ON sc.codigo_cliente = c.codigo
		INNER JOIN enderecos e ON c.codigo_endereco = e.codigo  
WHERE sc.esta_ativo = TRUE AND
      e.codigo_cidade = 820

GROUP BY s.descricao

O retorno é este

#       qtd
1          5
2          1
3          4
4          1

Ele está retornando ai 4 linhas que seriam o serviço oferecida em uma cidade, ou seja, a primeira linha informa que tem um serviço com 5 prestadores, a segunda é outro serviço com 1 prestador, a terceira outro serviço com 4 prestadores e a última linha outro serviço com 1 prestador.

Sendo assim tenho quatro serviços para aquela cidade.
Eu queria que o retorno fosse este:

#       qtd
1          4

Ou seja, voltando com 1 linha que informe quantos serviços realmente tem naquela cidade.

Alguém sabe com acertar este SQL?

6 Respostas

E

blz, vc falou que quer agrupar por cidade certo? vc tentou fazer o group by por cidade?

A

Olá erasmo_tec,

mas dentro da cláusula WHERE tenho isso e.codigo_cidade = 820 o que já define a cidade.

Eu quero retornar quantas profissões tem cadastradas para aquela cidade, só que neste sql ele retorna a quantidade de profissionais por profissões.

E

então, quando vc diz e.codigo_cidade = 820 vc condiciona que quer tudo referente a cidade 820 mas não está dizendo que quer agrupado por cidade.

tente fazer o group by por cidade tb, exemplo group by c.cidade, s.descricao

A

Consegui resolver

O código ficou assim:

SELECT count(DISTINCT s.codigo) as qtd 
FROM servicos s INNER JOIN servicos_cliente sc ON s.codigo = sc.codigo_servico
		INNER JOIN clientes c ON sc.codigo_cliente = c.codigo
		INNER JOIN enderecos e ON c.codigo_endereco = e.codigo  
WHERE sc.esta_ativo = TRUE AND
      e.codigo_cidade = 820

Ou seja, coloquei um DISTINCT e tirei o GROUP BY.

Agora ele esta retornando 4 como eu queria.

#       qtd
1          4

Fica o código ai caso alguém passe pelo mesmo problema.

E

sim, com distinct tb funciona… muito bem!

A

Valeu a força erasmo_tec.

Criado 28 de julho de 2011
Ultima resposta 28 de jul. de 2011
Respostas 6
Participantes 2