Lehre - Filter durch Fremdgesamtwert
-
10-07-2019 - |
Frage
Wie kann ich aufgrund der Agregate Funktion in dem in Lehre verwenden?
Zum Beispiel möchte ich Benutzer mit dummen viel Zahlen kennen.
SELECT u.name, COUNT(p.id) AS users_phonenumber_count
FROM users u
INNER JOIN phonenumbers p ON p.user_id = u.id
WHERE
users_phonenumber_count > 10
GROUP BY
u.id
Wie kann ich die users_phonenumber_count in dem in dql?
Lösung
Sie müssen mit HAVING- nicht WHERE. Außerdem müssen Sie zu einer Gruppe von etwas, das tatsächlich in der Abfrage ist, in diesem Fall u.name. Unter der Annahme, u.name ist einzigartig -. Wenn nicht, Sie müssen Gruppe sowohl u.id und u.name
SELECT u.name, COUNT(*) AS users_phonenumber_count
FROM users u
INNER JOIN phonenumbers p ON p.user_id = u.id
GROUP BY
u.name
HAVING
count(*) > 10
Andere Tipps
Ich kann nicht genaue Details erinnern, wie ich dies getan habe, aber denken Sie daran, dass es verwenden mußte „haben“
Dies ist wegen der Art und Weise SQL funktioniert, nicht speziell Lehre - WHERE nicht berechneten Werte vergleichen können, müssen Sie verwenden (oder Sie tun können WHERE COUNT (etwas)