mysql - 财务订单簿的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
感谢您的提示
解决方案
我使用 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
推荐阅读
- laravel - laravel 获取会话数据并按最新排序
- gmail - 允许其他用户为我的电子邮件设置 gmail 过滤器
- python - 如何在 Elasticsearch 中对术语聚合结果进行分页
- c - scanf 格式的输入不适用于扫描的第一个字符
- javascript - 在 Array of Array 中查找对象
- asp.net-core - 发布后的 Asp net core web app 运行时错误
- ios - 为什么我的 iOS 状态栏应该有一个白色区域
- azure-cosmosdb - 如何在 Azure CosmosDB 中为图形数据库选择分区键
- javascript - 使用多个属性时无法加载 SelectTagHelper
- python - 获取时间窗口的楼层