Ich mag Beiträge von Benutzern auswählen, die bestimmte Anhänger haben, die höher als der Gesamtdurchschnitt ist (im Vergleich zu anderen Benutzern)MySQL: wo Zahl ist höher als der Durchschnitt
Das Problem ist, wenn ich AVG()
verwende es begrenzt die Anzahl der Beiträge/Benutzer kommen durch, aber ich kann GROUP BY j.id
nicht verwenden, da es die durchschnittliche Zählung und WHERE j2.fCount >= j2.oAvg
Anschläge brechen richtig
Hier ist mein Code
SELECT * FROM (
SELECT j.*, ROUND(AVG(j.fCount)) as oAvg
FROM (
SELECT p.id , COUNT(fCount.id) as fCount
FROM `post` p
LEFT JOIN `table` table ON ...
LEFT JOIN `user` user ON ....
LEFT JOIN `follow` fCount ON fCount.user_id=user.id AND fCount.follow_id=table.ids
WHERE p.user_id=fCount.user_id
group by p.id
) j
---- > `GROUP BY j.id` - BREAKS THE AVERAGE BELOW
) j2
WHERE j2.fCount >= j2.oAvg
Sie arbeiten Danke :)
Danke, aber ist es eine effizientere Art und Weise, dies zu tun? anstatt es zweimal zu zählen – user6227254
Ich glaube nicht, dass es einen Weg gibt ... aber ich könnte falsch sein –
Ich denke, wenn Sie wirklich wollten, könnten Sie eine Speicherprozedur erstellen, die Ihre j-Tabelle als temporäre Tabelle erstellt. dann Abfrage auf dieser j-Tabelle und dann, wenn der Speicherproc fertig ist, können Sie es fallen lassen. Ich weiß nicht, wie sonst Sie es tun können, ohne diese innere Tabelle zweimal zu fragen –