Wie SUM () von einem Offset durch das Ende der Tabelle?

8

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.

    
keithjgrant 12.04.2010, 17:02
quelle

3 Antworten

2

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%
    
Felix Kling 12.04.2010, 17:06
quelle
7
%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 .

    
Quassnoi 12.04.2010 17:04
quelle
2

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.

    
Banjer 12.04.2010 17:14
quelle

Tags und Links