一尘不染

MySQL SELECT函数汇总当前数据

sql

我有一个查询,返回的内容是这样的:

| ID | Val |  
| 0  | 10  |     
| 1  | 20  |     
| 2  | 30  |

但是相反,我想要这样的东西:

| ID | Val | Sum |   
| 0  | 10  |  10 |   
| 1  | 20  |  30 |   
| 2  | 30  |  60 |

这是在查询上做的一种方法(我正在使用MySQL)?

ks


阅读 248

收藏
2021-03-17

共1个答案

一尘不染

这称为累积和。

Oracle和中PostgreSQL,它是使用窗口函数计算的:

SELECT  id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM    mytable

但是,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
;
2021-03-17