Question

Imaginez que j'ai une table de base de données de clients contenant {id, nom d'utilisateur, prénom, nom}

Si je veux savoir combien d'instances il y a différents prénoms que je peux faire:

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

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

Comment puis-je écrire la même requête pour ne renvoyer que les prénoms qui apparaissent plusieurs fois? c'est-à-dire que, dans l'exemple ci-dessus, ne renvoie que les lignes pour jeff et adam.

Était-ce utile?

La solution

Vous voulez que la clause ait , comme ceci:

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

Autres conseils

groupe par 2 ordre par 1 est terrible, devrais-je dire. Utilisez des noms de colonne appropriés, si cela est pris en charge: cela améliorera considérablement la lisibilité.

Dans cet esprit,

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

C'est ce que fait la clause HAVING. Je ne sais pas si cela fonctionnera dans informix, mais tentez votre chance:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top