Frage

Stellen Sie sich vor mir eine DB-Tabelle von Kunden enthalten, habe {id, Benutzername, Vorname, Nachname}

Wenn ich will, finden, wie viele Instanzen gibt es verschiedene Vornamen ich tun kann:

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

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

Wie schreibe ich die gleiche Abfrage nur die Vornamen zurück, die mehr als einmal auftreten? das heißt in dem obigen Beispiel nur die Zeilen für jeff und Adam zurück.

War es hilfreich?

Lösung

Sie möchten die having Klausel, etwa so:

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

Andere Tipps

group by 2 order by 1 schrecklich ist, würde ich sagen. Verwenden Sie geeignete Spaltennamen, wenn diese unterstützt wird. Dies wird drastisch Lesbarkeit verbessern

Mit dem im Verstand,

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

Das ist, was die HAVING-Klausel der Fall ist. Ich bin mir nicht sicher, ob dies in Informix arbeiten, aber geben Sie ihm einen Schuss:

select firstname, count(*) 
from Customers 
group by firstname
HAVING COUNT(*) > 1
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top