Это данные в табличных заказах.
Кто-нибудь может помочь мне сделать статистику?
------------------------------- id | order_amount | createtime ------------------------------- 1 | 10 | 1513605522 2 | 20 | 1513605523 3 | 30 | 1513605524 4 | 40 | 1513605525 -------------------------------Это то, что мне нужно
------------------------------- total_income | createtime ------------------------------- 10 | 1513605522 30 | 1513605523 60 | 1513605524 100 | 1513605525 -------------------------------, это мое выражение sql, оно не дает мне то, что я хочу.
select sum(order_amount) as total_income from order group by create time;
КСТАТИ. Можно ли производить выход.... Любая помощь для меня очень важна. Большое спасибо.
В MySQL вы можете сделать это, используя коррелированный подзапрос:
select o.*,
(select sum(o2.order_amount)
from orders o2
where o2.createtime <= o.createtime
) as running_amount
from orders o;
Другой вариант - использование нестандартного SQL - использовать переменные:
select o.*, (@s := @s + o.order_amount) as running_amount
from (select o.*
from orders o
order by createtime
) o cross join
(select @s := 0) params;
Обратите внимание, что подзапрос необходим только в более поздних версиях MySQL.
На самом деле MySQL 8.0, наконец, поддерживает функции окна, поэтому это можно сделать с использованием стандартного SQL в этой версии:
select o.*, sum(o.order_amount) over (order by o.createtime) as running_amount
from orders o;
Ты можешь использовать:
set @amt := 0;
select @amt := @amt + order_amount as total_income, createtime
from order
order by createtime asc;
ROWS UNBOUNDED PRECEDING
?