我有一个查询,返回的内容是这样的:
| ID | Val | | 0 | 10 | | 1 | 20 | | 2 | 30 |
但是相反,我想要这样的东西:
| ID | Val | Sum | | 0 | 10 | 10 | | 1 | 20 | 30 | | 2 | 30 | 60 |
这是在查询上做的一种方法(我正在使用MySQL)?
ks
这称为累积和。
在Oracle和中PostgreSQL,它是使用窗口函数计算的:
Oracle
PostgreSQL
SELECT id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) FROM mytable
但是,MySQL不支持它。
MySQL
在中MySQL,您可以使用会话变量进行计算:
SET @s = 0; SELECT id, val, @s := @s + val FROM mytable ORDER BY id ;
或以纯粹的基于集合但效率较低的方式:
SELECT t1.id, t1.val, SUM(t2.val) FROM mytable t1 JOIN mytable t2 ON t2.id <= t1.id GROUP BY t1.id ;