首页 > 解决方案 > 财务订单簿的MYSQL查询分组依据和累积总和

问题描述

你好我有以下数据集

id price amount
1    10    1
2    20    2
3    20    1.5
4    21    1
5    21    2
SELECT amount, price, (@CumulativeSum := @CumulativeSum + amount) AS CumSum 
FROM orderbook 

它工作正常。我还想使用“GROUP BY price”子句来填充我的 python 字典,但这会影响我的最终结果。最终数据应显示按价格分组的金额的总和。

我尝试了以下查询

SELECT amount, price, (@CumulativeSum := @CumulativeSum + amount) AS CumSum 
FROM orderbook  
GROUP BY price

SELECT SUM(amount), price, (@CumulativeSum := @CumulativeSum + amount) AS CumSum 
FROM orderbook  
GROUP BY price

SELECT amount, price, (@CumulativeSum := @CumulativeSum + SUM(amount)) AS CumSum 
FROM orderbook 

但是累积总和或分组总和总是错误的。

最终结果应该是一个简单的金融市场订单簿。

所需的输出是

price amount CumSum
10    1     1
20    3.5   4.5
21    3     7.5

感谢您的提示

标签: mysqlsumorderbook

解决方案


我使用 mysql 5.7(因为我正在使用这个版本)。您想对每个价格的金额结果进行累计,因此您应该使用SUBQUERY它来聚合

尝试这个:

    set @CumulativeSum := 0;
    SELECT price, summ,
   (@CumulativeSum:= @CumulativeSum + summ) as cumsum 
      FROM (SELECT SUM(amount) as Summ
             FROM (SELECT * FROM orderbook) a
             GROUP BY price
             ORDER BY price) b

结果

+-------+------+--------+
| price | summ | cumsum |
+-------+------+--------+
|    10 | 1.00 | 1.00   |
|    20 | 3.50 | 4.50   |
|    21 | 3.00 | 7.50   |
+-------+------+--------+

这是小提琴https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=4f607e38a23f069829dfaa177a8bc3d3


推荐阅读