SQL - WO AGGREGATE> 1
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.
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