Wie zähle ich MySQL-Einträge mit einem HAVING Kriterium
-
04-10-2019 - |
Frage
Also in der Regel können Sie einfach tun
SELECT COUNT(field.id) FROM table WHERE field.id > 100
und COUNT (Feld) wird die Anzahl der Einträge zurück, die das Kriterium der field.id> 100
Aber was dann, wenn Sie, was mit dem MIT Kriterium angegebene Einträge zählen wie
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
der Code würde in diesem Fall nicht funktionieren ....
Wie gehe ich über das Zählen Einträge, deren Kriterium werden über die HAVING-Klausel angegeben?
Vielen Dank im Voraus
Lösung
Nun, COUNT
Werke Vor HAVING
angewendet wird, auf die Ergebnismenge . Also, wenn Sie ihre Zahl zu zählen brauchen -. Sie Ihre Abfrage mit einem anderen zu wickeln haben
SELECT COUNT(*) FROM (
SELECT field.id * 10 AS foo FROM table HAVING foo > 100
)
Andere Tipps
Ich kann auch nicht Abfrage ausführen, wie sie ist - sie geben mir einen 1140-Fehler für „mit einem Aggregat ohne GROUP BY-Klausel“ (IE: COUNT(field.id)
). Alles scheint nicht auf das Aggregat überhaupt zu beziehen, sondern nur die Möglichkeit, die Spalte Alias ??für den Vergleich mit Referenz ...
Die am häufigsten unterstützten Mittel ist:
SELECT field.id * 10 AS foo
FROM table
WHERE field.id * 10 > 100
MySQL unterstützt jedoch eine Spalte Alias ??in der GROUP BY
oder HAVING
Klausel verweist. Es erfordert keine Backticks, aber ich habe Fälle gesehen, dass nicht funktionieren würde (nicht reservierte Worte) bis zum Backtick war anwesend:
SELECT field.id * 10 AS foo
FROM table
HAVING `foo` > 100
ich diesen Ansatz nicht empfehlen - es unterstützt auf SQL Server, aber nicht Oracle ...
Die HAVING
Klausel ist wie die WHERE
Klausel, der Unterschied ist, dass die HAVING
Klausel unterstützt Funktionen aggregieren, ohne sie zu benötigen in einer Unterabfrage eingewickelt werden.
HAFTUNGSAUSSCHLUSS - Ich habe dies nur getestet auf SQL Server
In diesem Fall hat, wird nur durchführen, alle Aggregatabfragen über den gesamten zurück Satz. Zunächst einmal können Sie nicht ausführen
SELECT COUNT(field.id), field.id * 10 AS foo FROM table HAVING foo > 100
weil field.id nicht in einem Abschnitt enthalten, der eine Gruppe oder eine Aggregatfunktion definiert; es funktioniert einfach nicht kompilieren.
Mit dieser sagte, die folgende SQL -
SELECT COUNT(field.id) FROM table HAVING COUNT(field.id) > 100
wird die Anzahl der Zeilen in der Tabelle zurück, wenn die Zählung ist größer als 100. Wenn es nicht, werden Sie kein Ergebnis erhalten.
Haben Sie ein spezielles Problem im Sinne? Was versuchen Sie zu zählen?