Antworten:
Verwenden Sie die HAVINGnot- WHEREKlausel für den Vergleich der Gesamtergebnisse.
Nehmen Sie die Abfrage zum Nennwert:
SELECT *
FROM db.table
HAVING COUNT(someField) > 1
Idealerweise sollte GROUP BYin der HAVINGKlausel eine Definition für die ordnungsgemäße Bewertung enthalten sein, aber MySQL erlaubt versteckte Spalten aus der GROUP BY ...
Ist dies in Vorbereitung auf eine einzigartige Einschränkung someField? Sieht so aus, als sollte es sein ...
someFieldWerte enthält, oder eine leere Ergebnismenge, wenn dies nicht der Fall ist.
SELECT username, numb from(
Select username, count(username) as numb from customers GROUP BY username ) as my_table
WHERE numb > 3
Sie können dies auch mit einem Self-Join tun:
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
Bitte schön:
SELECT Field1, COUNT(Field1)
FROM Table1
GROUP BY Field1
HAVING COUNT(Field1) > 1
ORDER BY Field1 desc
Einweg
SELECT t1.*
FROM db.table t1
WHERE exists
(SELECT *
FROM db.table t2
where t1.pk != t2.pk
and t1.someField = t2.someField)
Wie OMG Ponies sagte, ist die Haben-Klausel genau das, wonach Sie suchen. Wenn Sie jedoch gehofft haben, dass Sie diskrete Zeilen anstelle einer Zusammenfassung erhalten (das "Haben" erstellt eine Zusammenfassung), kann dies nicht in einer einzelnen Anweisung erfolgen. In diesem Fall müssen Sie zwei Anweisungen verwenden.
Ich gebe ein Beispiel für Group By zwischen zwei Tabellen in SQL:
Select cn.name,ct.name,count(ct.id) totalcity
from city ct left join country cn on ct.countryid = cn.id
Group By cn.name,ct.name
Having totalcity > 2
Für mich hat das Fehlen einer Gruppe nur ein leeres Ergebnis zurückgegeben. Ich denke, es ist ziemlich wichtig, eine Gruppe für die Aussage zu haben
Es sollte auch erwähnt werden, dass das "pk" ein Schlüsselfeld sein sollte. Die Selbstverbindung
SELECT t1.* FROM db.table t1
JOIN db.table t2 ON t1.someField = t2.someField AND t1.pk != t2.pk
von Bill Karwin geben Sie alle Aufzeichnungen, die Duplikate sind, was ich wollte. Da einige mehr als zwei haben, können Sie denselben Datensatz mehrmals erhalten. Ich habe alles in eine andere Tabelle mit denselben Feldern geschrieben, um dieselben Datensätze durch Unterdrückung von Schlüsselfeldern zu entfernen. Ich habe es versucht
SELECT * FROM db.table HAVING COUNT(someField) > 1
oben zuerst. Die von ihm zurückgegebenen Daten geben nur eines der Duplikate an, weniger als die Hälfte dessen, was Sie erhalten, aber die Anzahl ist gut, wenn das alles ist, was Sie wollen.
GROUP BYsicher (es sei denn, dies ist eine MySQL-Nicht-Standard-Sache)?