SQL: DOVE AGGREGATO > 1
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.
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