2016-08-23 3 views
0

Ich konnte nicht richtig Abfrage Lösung hinzufügen Gesamt Spalte für jede ZeileAbfrage für die gesamte Spalte in jeder Reihen

Tabelle

+-----+---------+ 
|id |amount | 
+-----+---------+ 
|1 |1000  | 
+-----+---------+ 
|2 |2050  | 
+-----+---------+ 
|3 |2666  | 
+-----+---------+ 

benötigt Ergebnis

+-----+---------+---------+ 
|id |amount |total | 
+-----+---------+---------+ 
|1 |1000  |1000  | 
+-----+---------+---------+ 
|2 |2050  |3050  | 
+-----+---------+---------+ 
|3 |2666  |5716  | 
+-----+---------+---------+ 

ps finden be +/-

danke

Antwort

2
SELECT 
    * 
    ,(@runningtotal:= @runningtotal + t.amount) as RunningTotal 
FROM 
    TableName t 
    CROSS JOIN (SELECT @runningtotal:= 0) var 

Yep mit einer Variablen Sie es ohne eine Sub-Abfrage tun. Hier ist eine SQL-Geige des Beispiels. http://sqlfiddle.com/#!9/956a2c/2

+0

danke Matt, denkst du, es ist gut in der Leistung mit etwa hundert Zeilen? –

+0

Ich benutze Mysql nicht wirklich viel, also bin ich nicht ganz positiv, aber es sollte eine ähnliche Leistung zu der eines Joins sein, denke ich. Hunderte von Zeilen sind in der Datenbankwelt ziemlich klein, daher denke ich nicht, dass Sie einen Unterschied bemerken werden. – Matt

1

Sie suchen eine laufende Summe. Eine Möglichkeit, dies in MySQL zu tun, ist eine korrelierte Unterabfrage.

select id,amount, 
amount+coalesce((select sum(amount) from tablename where id<t.id), 0) total 
from tablename t 

SQL Fiddle

+0

danke: # 1242 - Unterabfrage gibt mehr als 1 Zeile –

+0

Ich änderte die Abfrage. versuche es mit dem neuesten –

+0

funktioniert es jetzt, gibt es einen anderen Weg ohne Unterabfrage? –

0

Sie können dies versuchen:

SELECT aa.id, aa.amount, 
    (
     SELECT SUM(amount) 
     FROM your_table 
     WHERE id <= aa.id 
    ) AS total 
FROM your_table AS aa 
+0

ihre Rückkehr: '+ ----- + --------- + --------- + | ID | Menge | total | + ----- + --------- + --------- + | 1 | 1000 | NULL | + ----- + --------- + --------- + | 2 | 2050 | 1000 | + ----- + --------- + --------- + | 3 | 2666 | 3050 | + ----- + --------- + --------- + ' –

+0

Ich habe es nur überprüft und für mich gibt die richtigen Ergebnisse zurück. Überprüfen Sie noch einmal, jetzt verwendet es ID <= aa.id. Aber ich denke, Matts Antwort ist besser. –

Verwandte Themen