在特定条件下分组,但应显示原始数据中的所有行

问题描述 投票:0回答:1

我有以下数据

姓名 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
sql mysql
1个回答
0
投票

简单的方法是升级你的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 并再次运行它,则窗口总和将不再起作用,因为那里不支持它。

© www.soinside.com 2019 - 2024. All rights reserved.