2016-08-23 2 views
0

я не смог найти правильное решение запроса, чтобы добавить общий столбец для каждой строкизапроса для общего столбца в каждой строке

столика

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

необходим результат

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

пса: сумма может be +/-

спасибо

ответ

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

Yep с переменными вы можете сделать это без подзапроса. Вот пример скрипта SQL в примере. http://sqlfiddle.com/#!9/956a2c/2

+0

благодарит Мэтта, вы думаете, что он хорош в производительности сотнями рядов? –

+0

Я фактически не использую mysql, поэтому я не полностью уверен, но он должен быть похож на производительность соединения. сотни строк довольно малы в мире базы данных, поэтому я не думаю, что вы заметите какую-либо разницу. – Matt

1

Вы ищете текущую сумму. Один из способов сделать это в MySQL - это коррелированный подзапрос.

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

SQL Fiddle

+0

спасибо: # 1242 - Подзапрос возвращает более 1 строки –

+0

Я изменил запрос. попробуйте его с последним –

+0

его работая сейчас, есть ли другой способ без подзапроса? –

0

Вы можете попробовать это:

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

его возвращение: '+ ----- + --------- + --------- + | id | amount | total | + ----- + --------- + --------- + | 1 | 1000 | NULL | + ----- + --------- + --------- + | 2 | 2050 | 1000 | + ----- + --------- + --------- + | 3 | 2666 | 3050 | + ----- + --------- + --------- + ' –

+0

Я просто проверил его, и для меня верны правильные результаты. Повторите попытку, теперь он использует id <= aa.id. Но я думаю, что ответ Мэтта лучше. –

Смежные вопросы