Ich habe eine Tabelle, die das Auftreten von einer speziellen Aktion von verschiedenen Benutzern an verschiedenen Objekten zählt:MySQL: Abfrage der oberen n Aggregationen
CREATE TABLE `Actions` (
`object_id` int(10) unsigned NOT NULL,
`user_id` int(10) unsigned NOT NULL,
`actionTime` datetime
);
Jedes Mal, wenn ein Benutzer diese Aktion ausführt, eine Zeile eingefügt wird. Ich kann zählen, wie viele Aktionen für jedes Objekt durchgeführt wurden, und um Objekte, die von ‚Tätigkeit‘:
SELECT object_id, count(object_id) AS action_count
FROM `Actions`
GROUP BY object_id
ORDER BY action_count;
Wie kann ich die Ergebnisse in den oberen n Objekte begrenzen? Die LIMIT-Klausel wird vor der Aggregation angewendet, was zu falschen Ergebnissen führt. Die Tabelle ist potentiell riesig (Millionen von Zeilen) und ich muss wahrscheinlich Dutzende Male pro Minute zählen, also möchte ich das so effizient wie möglich machen.
bearbeiten: Eigentlich hat Machine Recht, und ich war falsch mit der Zeit, bei der LIMIT angewendet wird. Meine Abfrage lieferte die korrekten Ergebnisse, aber die GUI, die sie mir präsentierte, warf mich ab ... diese Art macht diese Frage sinnlos. Es tut uns leid!