Pergunta

Imagine que eu tenha uma tabela db de Clientes contendo {id, nome de usuário, nome, sobrenome}

Se eu quero encontrar quantos casos existem de diferentes firstnames posso fazer:

select firstname,count(*) from Customers group by 2 order by 1;

   username | count(*)
   ===================
   bob      |   1
   jeff     |   2
   adam     |   5

Como faço para escrever a mesma consulta para apenas firstnames retorno que ocorrem mais de uma vez? ou seja, no exemplo acima só retornar as linhas para Jeff e Adam.

Foi útil?

Solução

Você quer que a cláusula having, assim:

select 
    firstname,
    count(*) 
from Customers 
group by firstname
having count(*) > 1
order by 1

Outras dicas

group by 2 order by 1 é terrível, devo dizer. Use os nomes das colunas adequadas se isso é suportado:. Isso irá melhorar drasticamente a legibilidade

Com isso em mente,

select firstname, count(*) c 
from Customers 
group by firstname  
having count(*) > 1 -- Kudos to Shannon
order by c;

Isso é o que a cláusula HAVING faz. Eu não tenho certeza se isso vai funcionar em Informix, mas dar-lhe um tiro:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top