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

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top