Domanda

Immagina di avere una tabella db di clienti contenente {id, nome utente, nome, cognome}

Se voglio trovare quante istanze ci sono di nomi diversi che posso fare:

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

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

Come posso scrivere la stessa query per restituire solo i nomi che si verificano più di una volta? vale a dire nell'esempio sopra restituiscono solo le righe per jeff e adam.

È stato utile?

Soluzione

Desideri che la abbia , in questo modo:

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

Altri suggerimenti

raggruppa per 2 ordina per 1 è terribile, dovrei dire. Usa i nomi di colonna appropriati se supportati: questo migliorerà drasticamente la leggibilità.

Con questo in mente,

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

Ecco cosa fa la clausola HAVING. Non sono sicuro che funzionerà in Informix, ma provalo:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top