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.
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