我有以下数据
姓名 | AMT | 开斋节 | 特兰 |
---|---|---|---|
约翰 | 4000 | 1 | T1 |
玛丽 | 5000 | 2 | T2 |
约翰 | 8000 | 1 | T3 |
威利 | 5000 | 3 | T4 |
玛丽 | 1000 | 2 | T5 |
我想按
Name
、EID
进行分组并对 AMT
列求和,但仍显示所有行值,如下面的输出所示
姓名 | AMT | 开斋节 | 特兰 | 总金额 |
---|---|---|---|---|
约翰 | 4000 | 1 | T1 | 12000 |
玛丽 | 5000 | 2 | T2 | 6000 |
约翰 | 8000 | 1 | T3 | 12000 |
威利 | 5000 | 3 | T4 | 5000 |
玛丽 | 1000 | 2 | T5 | 6000 |
我已经尝试过这个,但它不起作用,而且我使用的是 MySQL 5.7,它也不支持 LEAD 和 LAG。 从 mytable 中选择 SUM(AMT) 作为 TotalAmt,* 按 NAME、EID 分组
如何获得下面的输出?
姓名 | AMT | 开斋节 | 特兰 | 总金额 |
---|---|---|---|---|
约翰 | 4000 | 1 | T1 | 12000 |
玛丽 | 5000 | 2 | T2 | 6000 |
约翰 | 8000 | 1 | T3 | 12000 |
威利 | 5000 | 3 | T4 | 5000 |
玛丽 | 1000 | 2 | T5 | 6000 |
简单的方法是升级你的MySQL版本,然后使用窗口总和:
SELECT
NAME,
AMT,
EID,
TRan,
SUM(AMT) OVER(PARTITION BY NAME) AS `Total Amt`
FROM yourtable;
如果无法升级,可以使用子查询来获取当前Name的总和:
SELECT
NAME,
AMT,
EID,
TRan,
(SELECT SUM(AMT) FROM yourtable y_sub WHERE y_sub.NAME = y_main.Name) AS `Total Amt`
FROM yourtable y_main;
在这个样本小提琴中使用 MySQL 8.0 中的数据,两个查询都会产生预期的结果。如果您在小提琴中将版本更改为 5.7 并再次运行它,则窗口总和将不再起作用,因为那里不支持它。