Ir para conteúdo
Fórum Script Brasil
  • 0

Agrupar Registos Pelo Conteudo De Um Determinado Campo


Guest hcardoso

Pergunta

boas

imaginem que tenho uma tabela com o nome de pessoas e o nome da cidade onde vivem:

id - nome - cidade

-------------------------

1 - hugo - porto

2 - telmo - leiria

3 - rui - lisboa

4 - joão - porto

5 - joel - aveiro

6 - pedro - leiria

eu preciso de uma consulta à tabela que me devolva apenas os registos das pessoas que vivem em cidades onde vive mais alguém...

neste caso devolveria:

1 - hugo - porto

4 - joão - porto

2 - telmo - leiria

6 - pedro - leiria

a questão é que isto tem que ser feito sem ser necessário fornecer o nome das cidades no SQL. a consulta tem que fazer a analise sozinha.

alguém me ode ajudar?

desde já agradeço a ajuda.

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Guest Visitante

peço desculpa pela duplicação.

quanto à minha questão...

o post que sugeriste não serve para aquilo que pretendo.

eu preciso que ele devolva os registo que têm cidades repetidas. tem que excluir os registos cujas cidades só aparecem num registo.

brigado pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Você quer manter apesar os duplicados e excluir os outros? Então usa subquery...

DELETE FROM tabela WHERE id NOT IN (SELECT id, COUNT(*) reg_dup FROM tabela HAVING reg_dup > 1)

Acho que a sintaxe tá correta... mas a idéia é essa.. apagar todos, com exceção dos que forem duplicados...

Link para o comentário
Compartilhar em outros sites

  • 0

boas

eu não quero excluir nenhum registo. quero que todos se mantenham na base de dados, mas a query ne devolva apenas aqueles em que as cidades têm mais que um habitante.

por isso tentei alterar o que sugeriste:

SELECT * FROM xteste WHERE cidade IN (SELECT cidade, COUNT(*) reg_dup FROM xteste HAVING COUNT(*) > 1 ORDER BY cidade ASC)

mas recebi o erro:

Erro na query: SELECT * FROM xteste WHERE cidade IN (SELECT cidade, COUNT(*) reg_dup FROM xteste HAVING COUNT(*) > 1 ORDER BY cidade ASC).Operand should contain 1 column(s)

esto no bom caminho ou nem por isso?

Link para o comentário
Compartilhar em outros sites

  • 0

boas

já estou a dar em maluco com isto ;)

com esta linha que sugeres:

SELECT *, COUNT(*) reg_dup FROM xteste GROUP BY cidade HAVING reg_dup > 1

da tabela:

id - nome - cidade

-------------------------

1 - hugo - porto

2 - telmo - leiria

3 - rui - lisboa

4 - joão - porto

5 - joel - aveiro

6 - pedro - leiria

apenas me são devolvidos os registos:

2 - telmo - leiria

1 - hugo - porto

e eu preciso que apresente:

1 - hugo - porto

4 - joão - porto

2 - telmo - leiria

6 - pedro - leiria

penso que o "group by" está a impedir que sejam apresentados todos os registos

Link para o comentário
Compartilhar em outros sites

  • 0
Sim... o GROUP BY "agrupa" todos os ítens duplicados... remove ele e coloca em um laço para exibir tudo...

boas

desculpa a minha ignorancia, mas o que é um laço?

obrigado pela paciencia

Link para o comentário
Compartilhar em outros sites

  • 0

Laço é o que se usa para pegar todos os registros retornados de um query... isso leva outros nomes, dependendo da linguagem de programação que você estiver usando... mas como você já conseguiu resgatar os dados (no caso com a query com group by), então ignore o meu comentário...

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...