Wenn SELECT SUM(amount) FROM transactions ORDER BY order LIMIT 0, 50
das Feld amount
für die ersten 50 Datensätze in einer Tabelle summiert, wie werden alle Datensätze nach den ersten 50 summiert? Mit anderen Worten, ich möchte etwas wie SELECT SUM(amount) from transactions ORDER BY order LIMIT 50, *
machen, aber das funktioniert nicht.
Die Dokumentation empfiehlt, eine unglaublich große Zahl als zweiten Parameter für% co_de zu verwenden %:
Um alle Zeilen von einem bestimmten Offset bis zum Ende der Ergebnismenge abzurufen, können Sie eine große Zahl für den zweiten Parameter verwenden. Diese Anweisung ruft alle Zeilen von der 96. Zeile bis zur letzten ab:
%Vor%
Beachten Sie, dass Ihre ursprüngliche Abfrage:
%Vor%tut nicht, was Sie wahrscheinlich denken, dass es tut. Es ist auch so:
%Vor% Die innere Abfrage (die normalerweise in einer anderen Engine fehlschlägt, aber in MySQL
aufgrund ihrer GROUP BY
Erweiterungssyntax funktioniert) gibt nur 1
records zurück.
ORDER BY
und LIMIT
werden dann auf diesen einen aggregierten Datensatz angewendet, nicht auf die Datensätze von transactions
.
Es gibt wahrscheinlich einen effizienteren Weg, aber Sie könnten zuerst eine Zählungsabfrage ausführen, um die Gesamtzahl der Zeilen in Ihrer Tabelle abzurufen:
%Vor%Stecke das in eine Variable und verwende diese Variable als zweites Argument für LIMIT. Sie könnten dies wahrscheinlich als eine verschachtelte MySQL-Abfrage tun.